C# 调用C++ 动态链接库 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
#define DllExport _declspec(dllexport)
extern "C" DllExport int __stdcall ConnectReader (HANDLE &hPort, int nTransMode,int nNetPort,LPCTSTR strReaderIP,LPCTSTR strSerialNum,int nBaudRate = 115200);
这个是C++项目中的调用
hComHandle=INVALID_HANDLE_VALUE;
int status = ConnectReader(hComHandle, workmode,netport,strIp,CommPort[i],nBaudRate);
可以正常调用
我在C#中 的引用
[DllImport(m_strPath)]
public static extern int ConnectReader(IntPtr handle, int nTransMode, int nNetPort, String strReaderIP, String strSerialNum, int nBaudRate);
C#调用
IntPtr handle = IntPtr.Zero;
int ks = GetAPI.ConnectReader(handle, 1, 0, "192.168.1.1", "COM2",19200);
直接过不了--尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 C#
[解决办法]
HANDLE &hPort
=>
ConnectReader(ref IntPtr handle
[解决办法]
String换成StringBuilder看看。
[解决办法]
byte[] buffer = new byte[65536];//申请65536大小的一个缓存区
GCHandle gc = GCHandle.Alloc(buffer, GCHandleType.Pinned);//gc固定对象地址
IntPtr handle = GCHandle.ToIntPtr(gc);//获取固定的对象地址
//做你要的事情
gc.Free();//释放gc