Buenas, la pregunta es simple. Tengo una api declarada en C# (en una clase).. y la quiero pasar a VB6. Es stdcall por lo que probe, asi que no habria dramas.
El tema es que usa un puntero a un array de bytes, y probe de mil y 1 formas y sigue crasheando.
probe con cada caso de estas declaraciones:
con sus respectivos varptr al array de bytes (en los casos que hay ByVal). tambien probe con VarPtrArray, y lo mismo... hasta hice un odl: (obviamente era 1 solo, no todos juntos)
y sigue crasheando...
Recalco que, el error NO ES DE CONVERSION DE LLAMADAS NO VALIDO (se ve que no es cdecl).
el tamaño del array de bytes esta bien, viene de esto:
y originalmente se llama asi:
apreciaria ayuda...
saludos
El tema es que usa un puntero a un array de bytes, y probe de mil y 1 formas y sigue crasheando.
Código (c#) [Seleccionar]
[DllImport("TPMCtrl_WinBond.dll")]
public static extern unsafe int ReadDataFromTPM(byte* UserData);
probe con cada caso de estas declaraciones:
Código (vb) [Seleccionar]
Private Declare Function ReadDataFromTPM Lib "TPMCtrl_WinBond.dll" (UserData As Any) As Long
Private Declare Function ReadDataFromTPM Lib "TPMCtrl_WinBond.dll" (UserData As Byte) As Long
Private Declare Function ReadDataFromTPM Lib "TPMCtrl_WinBond.dll" (ByVal UserData As Byte) As Long
Private Declare Function ReadDataFromTPM Lib "TPMCtrl_WinBond.dll" (UserData As Long) As Long
Private Declare Function ReadDataFromTPM Lib "TPMCtrl_WinBond.dll" (ByVal UserData As Long) As Long
Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Var() As Any) As Long
Private c_bvUserData(24) As Byte
con sus respectivos varptr al array de bytes (en los casos que hay ByVal). tambien probe con VarPtrArray, y lo mismo... hasta hice un odl: (obviamente era 1 solo, no todos juntos)
Código [Seleccionar]
[entry("ReadDataFromTPM")]
long ReadDataFromTPM([in] long UserData);
long ReadDataFromTPM([in] byte *UserData);
long ReadDataFromTPM([in] byte * UserData[24]);
y sigue crasheando...
Recalco que, el error NO ES DE CONVERSION DE LLAMADAS NO VALIDO (se ve que no es cdecl).
el tamaño del array de bytes esta bien, viene de esto:
Código (c#) [Seleccionar]
private byte[] m_UserData = new byte[0x18];
y originalmente se llama asi:
Código (c#) [Seleccionar]
public unsafe void GetUserData()
{
fixed (byte* numRef = this.m_UserData)
{
try
{
ReadDataFromTPM(numRef);
}
catch
{
throw;
}
}
}
apreciaria ayuda...
saludos