Umanaged C++:Wie ordne ich einen Zeiger auf einen Zeiger zu einem int?
int foo(int ** New_Message_Pointer);
Wie kann ich marshall dies in C#?
[DllImport("example.dll")]
static extern int foo(???);
Umanaged C++:Wie ordne ich einen Zeiger auf einen Zeiger zu einem int?
int foo(int ** New_Message_Pointer);
Wie kann ich marshall dies in C#?
[DllImport("example.dll")]
static extern int foo(???);
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);
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.