在我的 C# 代码中,我想导入一个 C++ DLL。我使用 dllimport,它可以很好地处理一些功能。但是在一个函数中,我得到了一个 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,使其正常工作?最好的祝福
托比