Ver Mensaje Individual
  #12  
Antiguo 24-10-2019
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Habría que ver exactamente como es el archivo cabecera en C para ver se aplican alineación al código. Otra forma de saberlo es conocer el tamaño de la estructura en C. Las estructuras pueden estar alineadas en memoria dando como resultado tamaños diferentes a los esperados. Al traducir a delphi estas cosas hay que conocerlas, como saber que para C char tiene siempre tamaño 1 y que es indiferente de BYTE. En delphi unicode CHAR tiene tamaño 2 por lo que la traducción debe ser a AnsiChar o a Byte, según el contexto.

Ya que no dispongo de la dll en cuestión no puedo hacer pruebas pero propongo probar con esta definición:
Código Delphi [-]
uses
  Windows.....

type
{$ALIGN 1}
TSSP_COMMAND = record
  Key: TSSP_FULL_KEY;
  BaudRate: ULONG;  //Cardinal
  Timeout: ULONG;
  PortNumber: BYTE; // AnsiChar
  SSPAddress: BYTE;
  RetryLevel: BYTE;
  EncryptionStatus: BYTE;
  CommandDataLength: BYTE;
  CommandData: Array[0..255-1] of BYTE;
  ResponseStatus: Byte;
  ResponseDataLength: Byte;
  ResponseData: Array[0..255-1] of BYTE;
  IgnoreError: BYTE;
end;
{$ALIGN OFF}

Se fuerza una alineación a 1 pero se puede forzar a también a 2, 4, 8 o 16. Para una alineación = 1 sizeof(TSSP_COMMAND) devolvería 542

Diego E. los copiladores no interpretan nada revuelto simplemente cometemos errores en el tamaño de los tipos o su alineación. Otra forma de equivocarse es en interpretar erróneamente los datos con sus punteros.


Saludos.
Responder Con Cita