El tema es que usa un puntero a un array de bytes, y probe de mil y 1 formas y sigue crasheando.
Código
[DllImport("TPMCtrl_WinBond.dll")] public static extern unsafe int ReadDataFromTPM(byte* UserData);
probe con cada caso de estas declaraciones:
Código
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:
[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
y originalmente se llama asi:
private byte[] m_UserData = new byte[0x18];
Código
public unsafe void GetUserData() { fixed (byte* numRef = this.m_UserData) { try { ReadDataFromTPM(numRef); } catch { throw; } } }
apreciaria ayuda...
saludos