访问冲突异常

时间:2010-08-31 15:47:59

标签: c# visual-c++ dll opencv access-violation

我有一些奇怪的问题。我使用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.

任何人都可以建议我解决这个问题。在托管代码中访问时是否存在访问冲突?

1 个答案:

答案 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