 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
VCL + DLL Invitado
|
Publicado: Mie 21 Jul, 2004 11:12 am Asunto: _Leo :) Problemas con una DLL propia |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Vie 23 Jul, 2004 5:50 pm Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 26 Jul, 2004 9:15 am Asunto: |
|
|
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.. _________________
 |
|
| Volver arriba |
|
 |
VCL + DLL Invitado
|
Publicado: Lun 26 Jul, 2004 1:47 pm Asunto: |
|
|
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 |
|
 |
VCL + DLL Invitado
|
Publicado: Lun 26 Jul, 2004 6:22 pm Asunto: |
|
|
Tambien da el error "Bad parameter" con el codeguard activo
Estoy desesperado |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 26 Jul, 2004 6:51 pm Asunto: |
|
|
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. _________________
 |
|
| Volver arriba |
|
 |
VCL + DLL Invitado
|
Publicado: Lun 26 Jul, 2004 7:28 pm Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 26 Jul, 2004 7:49 pm Asunto: |
|
|
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.. _________________
 |
|
| Volver arriba |
|
 |
VCL + DLL Invitado
|
Publicado: Lun 26 Jul, 2004 8:01 pm Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 26 Jul, 2004 9:40 pm Asunto: |
|
|
¿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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|