Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pregunta teórica sobre el tipo Record en DLLs en Delphi 7 (https://www.clubdelphi.com/foros/showthread.php?t=40885)

nlsgarcia 01-03-2007 08:29:35

Pregunta teórica sobre el tipo Record en DLLs en Delphi 7
 
:) Hola:

¿Hay alguna restricción teórica en el orden de los parámetros en una estructura tipo record definida por referencia cuando esta es utilizada en un DLL escrito en Delphi para devolver valores a un programa en VB6 o cualquier otro lenguaje?

Ejemplo:

Esta estructura definida en un Dll escrito en Delphi devuelve correctamente
los datos que solicita un programa escrito en VB6

Código Delphi [-]
 
TQueryPrnStatus = Record
   UltSecX : Array[0..2] of Char; 
   NTickets : Array[0..12] of Char; 
   PrnStatusHdw : Array[0..2] of Char; 
   ErrStatus : Array[0..2] of Char; 
   PaperStatus : Array[0..2] of Char; 
   SlipStatus : Array[0..2] of Char; 
   PrnID : Array[0..10] of Char;   
  TCounter : Array[0..6] of Char; 
   IvaA : Double;
   IvaB : Double;
   IvaC : Double;
   PrnStatusApp : Byte;
   LineCounter : Byte;
   AutStatus : Byte;
end;

Si los campos tipo byte se colocan delante de los tipo double, la función del Dll en Delphi no da ningún error, pero los valores double son devueltos en 0. Ademas de esto si se hace un Debug al Dll, el valor del IvaC que deberia venir en 0 (Todos los campos son inicializados antes de la llamada al Dll según su tipo) viene con un valor arbitrario expresado en notación científica.

Código Delphi [-]
 
TQueryPrnStatus = Record
   UltSecX : Array[0..2] of Char; 
   NTickets : Array[0..12] of Char; 
   PrnStatusHdw : Array[0..2] of Char; 
   ErrStatus : Array[0..2] of Char; 
   PaperStatus : Array[0..2] of Char; 
   SlipStatus : Array[0..2] of Char; 
   PrnID : Array[0..10] of Char;   
  TCounter : Array[0..6] of Char; 
   PrnStatusApp : Byte;
   LineCounter : Byte;
   AutStatus : Byte;
   IvaA : Double;
   IvaB : Double;
   IvaC : Double;
end;

¿Hay alguna razón teórica para este comportamiento?

No incluyo el programa dado que es muy extenso, la pregunta es solo a nivel teórico y repito: El programa con la primera estructura funciona sin errores y los datos ingresan al Dll con sus respectivos valores dados en la inicialización del programa hecho en VB6.

Gracias de antemano. :)

jam 01-03-2007 09:38:10

Prueba con TQueryPrnStatus = packed Record

nlsgarcia 02-03-2007 03:05:41

Respuesta a Jam:
 
:) Hola:

Gracias por tu comentario, voy a probar. :)


La franja horaria es GMT +2. Ahora son las 15:31:20.

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