pinvoke: Pointer to Pointer

21/02/2012 - 12:18 von Curtis Newton | Report spam
Hallo,

ich habe hier in einer DLL folgendes:

typedef struct _DeviceKey
{
INT32 _serial;
void *_private;
} DeviceKey;

nebst dieser Funktion:

INT32 GetDeviceKeyListEntry(INT32 index, DeviceKey** device_key);

Mein Ansatz:

public class DeviceKey
{
Int32 _serial;
IntPtr _private;
};

[DllImport("My.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetDeviceKeyListEntry(Int32 index, out DeviceKey device_key);


Leider stürzt das Programm beim Aufruf ab. Wie mache ich es richtig?

C.
 

Lesen sie die antworten

#1 Jochen Kalmbach [MS MVP]
21/02/2012 - 12:30 | Warnen spam
Hallo Curtis!


INT32 GetDeviceKeyListEntry(INT32 index, DeviceKey** device_key);

Mein Ansatz:

public class DeviceKey
{
Int32 _serial;
IntPtr _private;
};



Das muss struct sein und StructLayOut (Sequential)


[DllImport("My.dll", CallingConvention = CallingConvention.Cdecl)]



Bist Du sicher, dass cdecl stimmt?
Auch bekommst Du ja ein *Array* zurück!

Ich habe die Beführchung, dass dies so nicht geht.

Ähnliche fragen