Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

_Leo :) Problemas con una DLL propia

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: _Leo :) Problemas con una DLL propia Responder citando

Saludos,

Tengo un aplicacion que hace uso de una dll que he creado yo tambien. Todo "funciona bien" EXCEPTO cuando son compilados, ambos proyectos, con los siguientes parametros:

- Sin "Use RTL Dynamic"
- Sin "Build with runtime packages"

Nota: Esto lo hago para que incluye las librerias en el EXE

Alguien me puede explicar que es lo que puede pasar?

Muchas gracias
Volver arriba
Mensaje    Asunto: Responder citando

Con la información que das es imposible saber lo que puede estar pasando. No pones mensajes de error, ni código, ni una forma de reproducir el problema, etc.


PD: Te recomiendo que no dirijas tus preguntas a nadie en concreto ya que con esto puede que mucha gente no te conteste ya que esta esperando que lo haga la persona a la que va dirigido. Total aunque no aparezca mi nombre lo voy a ver de todas formas, si no contesto es, o porque no entiendo la forma de preguntar de algunas personas, la información es escasa, se necesita mas tiempo para responder que el que tengo en el momento que veo el mensaje, no tengo ni idea de la respuesta, etc.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

A mi jucio, he creado una DLL, para Hook del Teclado, el cual llamo en mi aplicacion al principo la DLL, tenia un tamaño de 13Kb,
al compilar sin
Cita:

- Sin "Use RTL Dynamic"
- Sin "Build with runtime packages"


Tal y como se dice, la DLL, se incremento en 568 Kb, bien, lo que quiero decirte con esto es que NO tuve los problemas que mencionas...

A mi jucio, espero no sea asi.., esta bien echa tu DLL,
compilada con (Ctrl+F9), o intentas ejecutar tu DLL. (F9), es una observacion..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Saludos de nuevo,

A ver si consigo explicarlo un poco mejor,

Los problemas estan relacionados con la memoria, ya que paso TForm, TImages, etc como parametros a funciones de las dlls y funcionan bien,
pero conforme las voy invocando provocan errores del tipo Out of memory, error en /* TCustomForm.Destroy */ inline __fastcall virtual ~TForm(void) { }, es decir, en la liberacion formularios MDIChild que tengo.

No se si explico un poco el problema pero es que no se donde buscar.
No se si influye que las DLL son invocadas con la convencion __stdcall.

Muchas gracias
Volver arriba
Mensaje    Asunto: Responder citando

Tambien da el error "Bad parameter" con el codeguard activo

Estoy desesperado
Volver arriba
Mensaje    Asunto: Responder citando

Mira leyendo un rato encontre el siguiente codigo, lo pongo tal y cual ya que tiene copyrigh, de un autor, jej e

Código:

// ----------------------------------------------------
// Nombre del fichero: STCDLL32.CPP
//
// Éste es el fichero fuente principal de la DLL,
// el punto de entrada y de salida de la DLL
//
// Copyright (c) Fco. Javier Ceballos
// ----------------------------------------------------

#include <windows.h>
#include "stcdll32.h"

// ----------------------------------------------------
// Función DllMain
//
// Éste es el punto de entrada y de salida de la DLL.
// Esta función es llamada por Windows. Usted no tiene
// que llamarla desde su aplicación.
//
// Parámetros:
//   hModule    - el handle para un ejemplar de la DLL
//   dwReason   - razón por la que ha sido llamada la DLL
//   lpReserved - reservado para uso del sistema.
//
// Valor retornado:
//   TRUE - indicando que la DLL se ha iniciado
//          satisfactoriamente.
// ----------------------------------------------------

BOOL WINAPI DllMain (HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
  switch (dwReason)
  {
    case DLL_PROCESS_ATTACH:
      // Escriba aquí el código que escribía en LibMain (Win16).
      // Quizá tenga que hacer alguna modificación por el hecho de
      // que puede ser llamada más de una vez.
      // Retorne TRUE para salir de la DLL una vez cargada
      // o FALSE si la carga falla.
      break;
 
    case DLL_THREAD_ATTACH:
      // Escriba aquí el código de iniciación que se tiene
      // que ejecutar cada vez que se cree un hilo en un proceso
      // que ya tiene cargada esta DLL.
      break;

    case DLL_THREAD_DETACH:
      // Escriba aquí el código de terminación que se tiene
      // que ejecutar cada vez que un hilo en un proceso sale
      // de la DLL que dicho proceso ya tiene cargada.
      break;
 
    case DLL_PROCESS_DETACH:
      // Escriba aquí el código que escribía en WEP (Win16).
      // Este código quizá no sea necesario porque el
      // sistema operativo ya se encarga de esta labor.
      break;
  }

  return TRUE;   // DLL_PROCESS_ATTACH satisfactorio
}

lo que me parece interesante es la parte del BOOL WINAPI DllMain
Puede que sea lo que necesitas, que estas utilizando mas de una instancia de la DLL.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

No se César, pongo el código de la dll a ver si asi alguien lo ve claro


#pragma comment(lib, "MEMMGR.LIB")

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}

#define DLLMODE extern "C" __declspec(dllexport)
#define CALLTYPE _stdcall


// Comprobar que existe un registro en una tabla concreta
DLLMODE bool CALLTYPE LocateRecord(TADOConnection * pConnection, String sTable, String sKey, String sText)
{
bool bFind;

TADOQuery * pQueryFind = new TADOQuery(NULL);
pQueryFind->Connection = pConnection;

String sQuery =
"SELECT " + sKey + " FROM " + sTable + " WHERE " + sKey + " = '" + sText + "'";
pQueryFind->SQL->Text = sQuery;

pQueryFind->Open();

bFind = ! pQueryFind->Eof;

delete pQueryFind;

return bFind;

}
Volver arriba
Mensaje    Asunto: Responder citando

Vamos por partes, primero empiezas por los forms y me das el codigo de una DLL, para una base de datos.., en si me parece que el relajo esta en la declaracion de la DLL, que no se ve muy correcta.. (a mi juicio personal)

Deberias poner como bien dice _LEO, el tipo de error y la accion de como producirlo..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Esa funcion genera el error "Bad parameter" con el codeguard activo.

El tipo de error es de acceso a memoria. Es como si los punteros se modificasen en la funcion. El problema puede estar en como se administra la memoria en una DLL.

Agradezco vuestra ayuda. Pero no se como explicar mejor el problema.
Volver arriba
Mensaje    Asunto: Responder citando

¿Que versión del builder usas?

Lo he probado con el BCB6 en WinXP y me funciona correctamente. Luego para estar aún mas seguro he copiado el ejecutable, la dll y la base de datos (Access) en un Win98 sin actualizaciones de ningún tipo, solo he instalado el motor de base de datos ADO 2.5 (que es la versión más vieja que me deja instalar en un Win98 sin tener que actualizar ninguna otra cosa) y funciona bien.

Si quieres puedo echarle un vistazo a un ejemplo de tu proyecto donde te de el problema, por si veo algo (si envías algo no te olvides de enviar alguna tabla de ejemplo):

leosoft ARROBA telefonica PUNTO net
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.