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