Ver Mensaje Individual
  #2  
Antiguo 30-09-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Diego E. Ver Mensaje
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. Ver Mensaje
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 {SSP_COMMAND};

Algo similar debes hacer con el resto.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita