我有一些奇怪的问题。我使用OpenCV在VC ++中编写了一个小模块。
工作正常。代码聚合来自连接到USB端口的CCTV摄像机的馈送。
然而,我必须用C#编写我的应用程序的其余部分,所以我创建了一个VC ++代码的DLL,并从C#调用了VC ++方法。
现在,我最终收到了错误
Attempted to read or write protected memory.
This is often an indication that other memory is corrupt.
任何人都可以建议我解决这个问题。在托管代码中访问时是否存在访问冲突?
答案 0 :(得分:1)
如果TrackBlob返回一个字符串,你应该能够定义你的dllimport:
[DllImport("Tracking.dll", EntryPoint = "TrackIt")]
public extern static string TrackBlob();
并跳过试图整理它。
通过将其作为IntPtr返回,您尝试获取指向非托管DLL拥有的内存的指针...将其作为字符串返回将返回该字符串的副本供您使用。
如果有效,请告诉我! 詹姆斯
*编辑*
尝试以下方法之一:
[DllImport("Tracking.dll", EntryPoint = "TrackIt")]
public extern static [MarshalAs(UnmanagedType.BStr)] string TrackBlob();
或
[DllImport("Tracking.dll", EntryPoint = "TrackIt")]
public extern static [MarshalAs(UnmanagedType.AnsiBStr)] string TrackBlob();
在字符串编组上查看此MSDN链接:
http://msdn.microsoft.com/en-us/library/s9ts558h.aspx