Cita:
Empezado por Diego E.
Estoy realizando un proyecto Delphi, para el que necesito usar una dll hecha para C/C++ o Visual Basic 6, en la documentación de la dll no viene la forma de implementar en Delphi(no es sorpresa) ni describe los comandos dentro de ella como para hacer el típico procedimiento de:
Es la primera vez que voy a trabajar con dll's y ciertamente no se usar C++, se que la información va de casi a totalmente nula, pero alguno tiene alguna referencia de como trabajar dicha dll (o en general cualquier dll hecha en un lenguaje externo a Delphi).
|
Al final, da igual en qué esté hecha la DLL (o debería dar igual), la llamada desde tu programa es indiferente.
Cita:
Empezado por Diego E.
Adjunto un poco del código que viene en la documentación de la dll:
Código:
struct SSP_COMMAND {
SSP_FULL_KEY Key;
unsigned long BaudRate;
unsigned long Timeout;
unsigned char PortNumber;
unsigned char SSPAddress;
unsigned char RetryLevel;
unsigned char EncryptionStatus;
unsigned char CommandDataLength;
unsigned char CommandData[255];
unsigned char ResponseStatus;
unsigned char ResponseDataLength;
unsigned char ResponseData[255];
unsigned char IgnoreError;
};
typedef UINT (__stdcall* DLLFUNC3)(SSP_COMMAND* cmd, SSP_COMMAND_INFO* sspInfo); DLLFUNC3 sspSendCommand = (DLLFUNC3)GetProcAddress(hInst, "SSPSendCommand");
|
En este caso tienes varias cosas.
Primero debes tener definida la cabecera de la función a la que vas a llamar.
Código Delphi
[-]
function sspSendCommand (cmd:SSP_COMMAND; sspInfo:SSP_COMMAND_INFO):Integer; stdcall; external 'itlsspproc.dll';
Como la cabecera necesita unos tipos "específicos" denerás tenerlos definidos en tu unidad (.PAS), así que debes "covertir" los tipos que ya te dan a Delphi.
En tu caso, por ejemplo, el tipo:
Código:
struct SSP_COMMAND {
SSP_FULL_KEY Key;
unsigned long BaudRate;
unsigned long Timeout;
unsigned char PortNumber;
unsigned char SSPAddress;
unsigned char RetryLevel;
unsigned char EncryptionStatus;
unsigned char CommandDataLength;
unsigned char CommandData[255];
unsigned char ResponseStatus;
unsigned char ResponseDataLength;
unsigned char ResponseData[255];
unsigned char IgnoreError;
};
Se traduce como:
Código Delphi
[-]type
SSP_COMMAND = record
Key: SSP_FULL_KEY;
BaudRate: LongInt;
Timeout: LongInt;
PortNumber: Byte;
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 ;
Algo similar debes hacer con el resto.