Được quản lý C++:Làm cách nào để sắp xếp một con trỏ tới một con trỏ tới một int?
int foo(int ** New_Message_Pointer);
Làm cách nào để kết hợp điều này với C#?
[DllImport("example.dll")]
static extern int foo(???);
Được quản lý C++:Làm cách nào để sắp xếp một con trỏ tới một con trỏ tới một int?
int foo(int ** New_Message_Pointer);
Làm cách nào để kết hợp điều này với C#?
[DllImport("example.dll")]
static extern int foo(???);
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);
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.