C#在调用C++提供的dll的时候,报错“C# 尝试读取或写入受保护的内存 。这通常指示其他内存已损坏。”,在网上找了各种资料,都没法解决。
于是我就自己思考自己的调试步骤,发现断点在报异常上一句代码,就不会报异常,于是我加了一句代码“Thread.Sleep(1000),意思就是当前线程暂停1秒钟。”
发现bug就解决了。代码:
C#调用C++:
[DllImport("DevCapture.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static IntPtr CaptureFromPreview(byte[] Imagepath, int type);
c#:
string imgpath = "D:\\" + ImgName + fFormatStr;
byte[] pBuf = Encoding.Default.GetBytes(imgpath);
//此句报异常
IntPtr namePtr = CaptureFromPreview(pBuf, 0);
更改后代码:
string imgpath = "D:\\" + ImgName + fFormatStr;
byte[] pBuf = Encoding.Default.GetBytes(imgpath);
//加入此句后正常通过
Thread.Sleep(1000);
IntPtr namePtr = CaptureFromPreview(pBuf, 0);
版权声明:本文为weixin_36373381原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。