2013-07-12 81 views

回答

5

您可以这样声明函数:

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

调用这个函数并传递指针为int的如数组,你可以使用下面的代码:

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(); 

再经过ppUnmanagedBuffer给你的函数:

foo(ppUnmanagedBuffer); 
1

你会希望它是

static extern int foo(IntPtr New_Message_Pointer) 

困难的部分可能会是什么关系呢,一旦你有一个IntPtr的......

你可能要采取看看this question from SO,它处理指针指向结构的指针。这是不同的,但可能会让你朝着正确的方向前进。