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