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);