Ver Mensaje Individual
  #1  
Antiguo 01-03-2007
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
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.
Responder Con Cita