2013-07-12 4 views

Antwort

5

Sie können Funktion wie folgt erklären:

[DllImport("example.dll")] 
static extern int foo(IntPtr New_Message_Pointer) 

diese Funktion aufrufen und Zeiger übergeben Array für zB int können Sie folgenden Code verwenden:

Int32[] intArray = new Int32[5] { 0, 1, 2, 3, 4, 5 }; 

// Allocate unmamaged memory 
IntPtr pUnmanagedBuffer = (IntPtr)Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(Int32)) * intArray.Length); 

// Copy data to unmanaged buffer 
Marshal.Copy(intArray, 0, pUnmanagedBuffer, intArray.Length); 

// Pin object to create fixed address 
GCHandle handle = GCHandle.Alloc(pUnmanagedBuffer, GCHandleType.Pinned); 
IntPtr ppUnmanagedBuffer = (IntPtr)handle.AddrOfPinnedObject(); 

Und dann ppUnmanagedBuffer an Ihre Funktion übergeben :

foo(ppUnmanagedBuffer); 
1

Sie wollen es

static extern int foo(IntPtr New_Message_Pointer) 

Der schwierige Teil wahrscheinlich wäre zu sein, was mit ihm zu tun, wenn Sie, dass IntPtr ...

Sie könnten eine nehmen wollen Sehen Sie sich this question from SO an, die sich mit Pointer-to-a-pointer-to-a-struct beschäftigt. Es ist anders, aber vielleicht bringen Sie es in die richtige Richtung.