2013-07-12 45 views

Trả lời

5

Bạn có thể khai báo hàm như thế này:

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

Để gọi chức năng này và vượt qua con trỏ đến int mảng cho ví dụ như bạn có thể sử dụng đoạn mã sau:

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

Và sau đó vượt qua ppUnmanagedBuffer đến chức năng của bạn :

foo(ppUnmanagedBuffer); 
1

Bạn sẽ muốn nó được

static extern int foo(IntPtr New_Message_Pointer) 

Phần cứng có lẽ sẽ phải làm gì với nó một khi bạn có mà IntPtr ...

Bạn có thể muốn tham gia một xem this question from SO, giao dịch với con trỏ-tới-một-con trỏ-đến-một-struct. Nó khác, nhưng có thể giúp bạn đi đúng hướng.

Các vấn đề liên quan