Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   XE7 crash address con TClientDataset arreglado! (https://www.clubdelphi.com/foros/showthread.php?t=89380)

iMia 12-11-2015 08:52:55

XE7 crash address con TClientDataset arreglado!
 
Buenas...
Quería comentaros un error que me ha llevado unos días de cabeza, pero que finalmente he resuelto...

Tengo un aplicacion de escritorio de 32 bits en XE... funciona perfectamente, 3000 instalaciones y sin fallos, en XP, en W7, en W8, en W8.1 y W10 (hasta en ubtuntu con el wine !!)

Hago la migración a XE7, sin ningún problema...(sólo utilizo un componente no propio de delphi, pero como tengo el fuente, lo recompilo con el XE7) y todo funciona perfectamente...
Bueno, todo hasta que lo pruebo en un Windows 8... que me sale un "crash address"...
Busco la línea, y es al crear el datamodule, que he puesto unos TClientDataset para guardar datos en tiempo de ejecución, y al hacer el CretateDataset explota...
Cosa que la misma app compilada con XE7 en Windows 7 y XP funciona perfectamente...

Rebuscando he encontrado que hay el problema está en la librería Midas.dll. Resulta que es una version antigua, pero que delphi incorpora esas funciones en una librería propia...
simplemente hay que añadir MidasLib a la cláusula uses

Código Delphi [-]
...
implementation

uses
  windows, Inifiles, Dialogs, midaslib,
   ...

Ale, compartido queda...

Neftali [Germán.Estévez] 12-11-2015 10:57:39

OK.

Gracias por la información.

Casimiro Noteví 12-11-2015 11:02:04

Que yo sepa, "de toda la vida", hay que añadir midaslib al uses.

Neftali [Germán.Estévez] 12-11-2015 11:16:26

Por lo que yo tengo entendido no es obligatorio, es más, puedes compilar un proyecto que use TClientDatset sin necesidad de añadirla.
La diferencia entre ambos casos, es que deba estar registrado como servidor COM (con regsevr32) o no en el sistema.

Creo que aquí está explicado un poco mejor.

Casimiro Noteví 12-11-2015 11:30:13

Cita:

Empezado por Neftali (Mensaje 499249)
Por lo que yo tengo entendido no es obligatorio, es más, puedes compilar un proyecto que use TClientDatset sin necesidad de añadirla.
La diferencia entre ambos casos, es que deba estar registrado como servidor COM (con regsevr32) o no en el sistema.
Creo que aquí está explicado un poco mejor.

Sí, es así. pero al comentar que funciona en muchas versiones distintas e incluso ejecutado con wine desde ubuntu, deduje que debería estar usando midaslib, salvo que incluyera unas instrucciones para todo el mundo para ejecutar regsevr32, incluso en linux.

iMia 12-11-2015 16:28:04

Cita:

Empezado por Neftali (Mensaje 499249)
Por lo que yo tengo entendido no es obligatorio, es más, puedes compilar un proyecto que use TClientDatset sin necesidad de añadirla.
La diferencia entre ambos casos, es que deba estar registrado como servidor COM (con regsevr32) o no en el sistema.

Creo que aquí está explicado un poco mejor.

Exactamente, así lo he hecho yo siempre, en el Instalshield agregaba las unidades necesarias y se registraban, entre ellas Midas.dll...

Pero ahora al detectar el error, lo he mirado y he visto que se puede hacer así...

AgustinOrtu 12-11-2015 17:02:45

Coincido con Casimiro, yo siempre meti la MidasLib en los proyectos. Tarde o temprano te evitas dolores de cabeza, tu aplicacion siempre va a funcionar bien si tiene la Midas que necesita

iMia 12-11-2015 17:12:19

Ya, eso ahora ya lo sé... :D
Y eso que estoy desde Borland Delphi for Windows.... :o

Al González 12-11-2015 21:11:17

Yo prefiero usar la biblioteca de enlace dinámico MIDAS.DLL, dado que ocasionalmente hay que regresar a una versión anterior debido a algún defecto del MIDASLib de tiempo de compilación. En otras palabras, tengo más control sobre qué MIDAS usar cuando opto por la DLL.

Desaconsejo agregar a la cláusula Uses la biblioteca MIDASLib, porque el ejecutable queda limitado a una única versión de la API sobre la cual trabaja el estupendo componente TClientDataSet.

Saludos.

Al González.

Casimiro Noteví 12-11-2015 21:19:43

Todos los días se aprende algo ^\||/


La franja horaria es GMT +2. Ahora son las 03:59:27.

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