Visual Basic.NET - DLL de lector de huellas: DLLImport no me funca

 
Vista:

DLL de lector de huellas: DLLImport no me funca

Publicado por Emilio (1 intervención) el 26/07/2008 21:34:12
Estimada gente del foro:

Tengo unas apis que manejan un dispositivo lector de huellas digitales; las mismas están hechas en C (o c++, no se bien

La declaracion original de la funcion dentro de la libreria dll, segun funciona en el manual de instruccione, es:

extern int WINAPI Wis_Diagnose (unsigned char *pwd, SYSTEMDATA CurSystemData);

Esta funcion devuelve valores de acuerdo a si el dispositivo esta on-line, u off-line

A continuacion, va la estructura SYSTEMDATA, completa

typedef struct _SYSTEMDATA
{
unsigned char Version; //DSP version
unsigned char IP[4]; //IP address
unsigned char NetMask[4]; //netmask
unsigned char Gateway[4]; //gateway
unsigned char BaudRate; //baudrate for external
unsigned char DeviceID[3]; //device ID
unsigned short UserNo; //user number
unsigned long LogNo; //log number
unsigned char AuthenMode; //1: 1-1 2: 1:1/1:N(<50 user
unsigned char UartMode; //1:232, 2:485
unsigned char VoiceEN; //1:enable
unsigned char ServerIP[3][4]; //server IP sets
unsigned char IDLength; //ID length for display
unsigned char Reserved[20];

DOORDATA DoorData; //door setting

unsigned char DeviceName[16]; //device name
unsigned char HasDevice; //this parameter should be 3
unsigned char ProtocolPswd; //protocol password
unsigned char Reserved1[7];
}SYSTEMDATA; //112 Bytes



Ahora, como se verá, en medio de la estructura antes declarada, hay otra estructura: DOORDATA; a continuacion, su definicion:

//door data structure
typedef struct _DOORDATA
{
unsigned short DoorOpenSec;
unsigned short DoorOverSec;
unsigned short AlarmTime;
unsigned char AlarmEnable; //0: Disable
unsigned char Reserved[9];
}DOORDATA; //16 bytes



. Ahora, el codigo que he diseñado en VB.NET 2005 es el siguiente:

Structure doordata

Dim DoorOpenSec As Short

Dim DoorOverSec As Short

Dim AlarmTime As Short

Dim AlarmEnable As String

Dim Reserved As String

End Structure

Structure SystemData

Dim Version As String

Dim IP As String

Dim NetMask As String

Dim Gateway As String

Dim BaudRate As String

Dim DeviceID As String

Dim UserNo As Short

Dim LogNo As Long

Dim AuthenMode As String

Dim UartMode As String

Dim VoiceEN As String

Dim ServerIP() As String

Dim IDLength As String

Dim Reserved As String

Dim DoorData As doordata

Dim DeviceName As String

Dim HasDevice As String

Dim ProtocolPswd As String

Dim Reserved1 As String

End Structure



y la declaracion de DLLImport es, como sigue, segun miré en el MSDN:

<DllImport("C:WisClient.dll", EntryPoint:="Wis_Diagnose", SetLastError:=True, _

CharSet:=CharSet.Unicode, ExactSpelling:=True, _

CallingConvention:=CallingConvention.StdCall)> _

Public Shared Function Diagnostico( _

ByVal pwd As String, _

ByRef systemdata As SystemData) _

As Integer

' Leave the body of the function empty.

End Function



Y por ultimo, el error que me sale cuando intento mostrar el resultado de esta funcion en un msgbox es:

Se detectó PInvokeStackImbalance
Message: Una llamada a la función PInvoke 'CVHuella!CVHuella.FrmPruebaDispositivo:iagnostico' impidió la correspondencia de la pila. Es posible que la razón sea que la firma PInvoke administrada no coincida con la firma de destino no administrada. Compruebe que la convención y los parámetros de llamada de la firma PInvoke coinciden con la firma no administrada de destino.

Espero que me puedan dar una mano en esto, les voy a estar muy agradecido!!

MUchas gracias desde ya!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder