在我的C#代碼中我想導入一個C++ DLL。我使用dllimport,它可以很好地處理一些函數。但在一個函數中,我得到一個HANDLE,我稍後需要調用另一個函數。DLLImport - >如何處理C#中的HANDLE
[DllImport("SiUSBXp.dll")]
public static extern int SI_Open(UInt32 deviceNum,ref IntPtr devHandle); // this function gets the HANDLE
[DllImport("SiUSBXp.dll")]
public static extern int SI_Write([In]IntPtr devHandle, [In, Out] byte[] inputByte, UInt32 size,ref UInt32 bytesWritten); // this function needs the HANDLE
在我的代碼調用這些函數是這樣的:
IntPtr devHandle = new IntPtr();
UInt32 bytesWritten = new UInt32();
byte[] byteArr = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
SI_Open(0, ref devHandle);
SI_Write(devHandle, byteArr, 10, ref bytesWritten);
如果我不喜歡這樣,我得到一個「System.AccessViolationException」。我在這裏和互聯網搜索,但沒有找到具體的答案。我如何正確使用IntPtr,所以它的工作原理? 問候
託比
做SI_Open和SI_Write C++函數的原型是什麼樣的? – 2011-05-08 15:54:21
您正在將字節數組初始化爲10個元素,但這對於SI_Write函數是否足夠? – 2011-05-08 15:58:08
SI_STATUS WINAPI SI_Open( \t DWORD dwDevice, \t HANDLE * cyHandle \t); – Toby 2011-05-08 15:59:36