Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-08-2020
blancasma blancasma is offline
Registrado
 
Registrado: ago 2020
Posts: 4
Poder: 0
blancasma Va por buen camino
Problemas TDBGrid En DLL con 10.4...

Buenas noches,

Espero que me puedan ayudar con un problema con el que llevo 2 semanas!!!

Tengo una aplicación la cual tiene varios DLLs y son llamados por un EXE en la versión 10.1 y todo funciona Excelente...

Pero ahora que estoy migrando a la 10.4 me ha salido un error bastante extraño a la hora de ejecución... he debugeado, eliminado componentes y he encerrado el error, pero no se como corregirlo... el problema es ¡¡¡¡¡ TDBGridColumns !!!!!

Ya cree una nueva aplicación con un DLL y en ésta he puesto el siguiente código:

Código:
void Proceso(void)
{
	TColumn *colx;
	TDBGridColumns *columX;
	colx = columX->Items[0]; 
}
y agrego la DLL de forma estática al ejecutable.. ¡muy simple!... se compila y liga sin problemas...
pero al ejecutar la aplicación, mientras se cargan librerías aparece este problema:


Cita:
Module Load: IMM32.dll. No Debug Info. Base Address: $767C0000. Process Project2.exe (3836)
Module Load: MSCTF.dll. No Debug Info. Base Address: $75BA0000. Process Project2.exe (3836)
Module Load: UxTheme.dll. No Debug Info. Base Address: $70CE0000. Process Project2.exe (3836)
Debug Output:
onecore\com\combase\objact\objact.cxx(826)\combase.dll!768B6819: (caller: 768B540B) ReturnHr(1) tid(211c) 800401F0 No se ha llamado a CoInitialize.

Process Project2.exe (3836)
First chance exception at $50CDB74D. Exception class $C0000005 with message 'access violation at 0x50cdb74d: read of address 0x00000000'. Process Project2.exe (3836)


y no continua con la ejecución ... es más nunca inicio

Debugeando un poco más me encuentro que el TDBGrid intenta cargar unas imagenes, pero al parecer no se ha inicializado algo que bota No se ha llamado a CoInitialize.

1.-No puedo llamar al CoInitialize porque aún no llega ni al WinMain (además debería ser responsabilidad de algún BPL)
2.-Pensé que faltaba algún BPL, los he agregado todos.
3.-He jugado con parametros de las opciones de compilación y ligado
4.-He agregado todos los componentes visuales que se me han ocurrido en el DLL (en un TForm) para 'forzar' a que se cargue la librería que hace falta
5.-He reinstalado de nuevo la versión 10.4 sobre un Win10 recién instalado sin ningún componente extra (Sin FastReport, etc)
6.-Tiene todos los parches que hasta hoy han salido de ésta versión.

Alguna idea?

De antemano gracias por leer

Saludos

Última edición por Casimiro Notevi fecha: 13-08-2020 a las 09:11:46.
Responder Con Cita
  #2  
Antiguo 13-08-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.329
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Has probado a llamar a CoInitialize en alguna de las inicializaciones dentro de la DLL?
Lo que habría que saber es quien o qué en la DLL necesita esa inicialización. ¿Seguro que es el TDBGrid?

Para estos casos creo que lo más recomentable es hacer un proyecto "mínimo" que genere el error. Y a partir de ahí intentar encontrar el error. DPR vacío (o casi) solo con la llamada a la DLL y el proyecto de la DLL con lo mínimo para que se genere.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 13-08-2020
blancasma blancasma is offline
Registrado
 
Registrado: ago 2020
Posts: 4
Poder: 0
blancasma Va por buen camino
Gracias por responder German, te comento...


Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
¿Has probado a llamar a CoInitialize en alguna de las inicializaciones dentro de la DLL?
Si, lo he puesto en el DllEntryPoint el CoInitialize, pero no llega nunca a ese punto... ya que se encuentra cargando aún las dependencias.


Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Lo que habría que saber es quien o qué en la DLL necesita esa inicialización. ¿Seguro que es el TDBGrid?
Yo sospecho que es vcldb es el que necesita esa inicialización y no, no es TDBGrid sino cuando utilizo la propiedad de Columns (de TDBGridColumns) cuando se presenta el problema.


Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Para estos casos creo que lo más recomentable es hacer un proyecto "mínimo" que genere el error. Y a partir de ahí intentar encontrar el error. DPR vacío (o casi) solo con la llamada a la DLL y el proyecto de la DLL con lo mínimo para que se genere.
Y es lo que hice, un DLL un unit con una función, el cual es llamado por un ejecutable con una forma y un boton para llamar a la función... y esta función es:


void Proceso(void)
{
TColumn *colx;
TDBGridColumns *columX;
colx = columX->Items[0];
}

El problema que genera todo este show es esta línea
colx = columX->Items[0];

La verdad, no le veo por donde...
Responder Con Cita
  #4  
Antiguo 24-08-2020
blancasma blancasma is offline
Registrado
 
Registrado: ago 2020
Posts: 4
Poder: 0
blancasma Va por buen camino
Probar en Sydney

Ya descarte todo, excepto si es mi computadora...

Alguien que tenga Sydney puede probar este pequeño proyecto???

Tiene un ejecutable y llama a una forma, la cual solo tiene un TDBGrid.

Si les sale el mismo error que a mi, entonces para reportarlo.. sino, entonces tendré que formatear mi maquina :P

De nueva cuenta, gracias por la ayuda
Archivos Adjuntos
Tipo de Archivo: zip PruebaDll.zip (39,2 KB, 9 visitas)
Responder Con Cita
  #5  
Antiguo 25-08-2020
blancasma blancasma is offline
Registrado
 
Registrado: ago 2020
Posts: 4
Poder: 0
blancasma Va por buen camino
Lo sabía.. es un bug de la VCL....

Reporte el caso a Embarcadero y tenía razón... es un bug de VCL, pongo la contestación del soporte...

Cita:
This is a bug VCL, you can report bug on the Quality Portal, the bug will be public and you will receive notifications when it is fixed. I can report the issue internally but then you will not get any notifications.

You can resolve the problem in two ways..

1) delay load the DLL, so in the EXE project
Project | Options | Building | C++ Linker | Advanced | Delay load DLLs
2) add the name of the DLL in your example it is "Project1.dll" (without the quotes)
3) use a package rather than a DLL, a package is a DLL but with more type information. This is the best solution as it is not a good idea to have DLLs and EXEs that have packages, the reason is that DLLs will initialise unit differently to packages, and this can cause problems in some cases where a framework depends on a specific initialisation order.

And your application will run as expected.

The reason this problem is occurring is that a class constructor (for TDBNavigator) tries to load some bitmaps using COM based APIs this means it needs to have CoInitialize called BEFORE they can be used. Because the class constructors are called very early on in the DLL initialising, before any other code can be called at DLL load time, therefore CoInitialize cannot be called either by the EXE or any of the packages used, and hence the failure. So the VCL will have to be fixed.
Aplique lo que comenta y funciono, lo que sigue es reportarlo para su corrección y ver en que parche se libera.


Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problemas con cargar los registro de una tabla en un TDBgrid edufg Conexión con bases de datos 19 31-07-2013 12:37:35
Problemas en el pintado de un Tdbgrid joancmb Varios 5 20-03-2013 13:14:05
Problemas para sumar en TDBGrid whatson Varios 1 18-12-2007 17:34:08
problemas con TDBGRID lazarous Varios 1 10-11-2005 16:01:44
Problemas con TDBGrid Novás Varios 0 30-01-2004 10:32:20


La franja horaria es GMT +2. Ahora son las 21:33:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi