从C#调用C ++时出现System.AccessViolationException

时间:2010-03-02 09:12:55

标签: c# c++ exception dll managed

我不知道为什么但是今天myOpenID似乎不起作用。无论如何...我有这个问题:我有一个非托管的C ++库(DLL),我必须嵌入现有的C#项目。现在......我在托管C ++中创建了一个迷你包装器(DLL),它调用库以便我可以从C#代码加载它,当我从命令行C#项目中尝试它时,它完美地工作,对吧结果,正确的行为ecc。

现在,当我在真实项目中加载它时,它开始给我奇怪的System.AccessViolationException来自迷你包装DLL。我没有C#的经验,也没有Windows下的一般manged / unmanaged C ++开发经验,我只是无法理解为什么这应该来自C#项目,而不是来自另一个。

更多信息:原始库使用OGRE3D渲染引擎进行计算,而我必须使用此库的项目使用OGRE,这会导致问题吗?

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

以下是您尝试先生的一些想法......

  1. 很难知道到底发生了什么,但我要做的第一件事就是从混合中删除这个托管的c ++ dll。这可能是令人困惑的事情。在某处,感觉数据没有在托管和非托管世界之间正确编组。另外,仅仅因为它不会从控制台崩溃,并不意味着代码工作正常,它仍然可能会破坏,只是不会触发访问冲突。我要看的第一件事就是使用p / invoke直接调用你的非托管dll,如果它坏了,你应该很快就知道了:

    Calling Win32 DLLs in C# with P/Invoke

  2. 可能是混合中的某个地方,这个指针被移动到一个不同的地址空间,在那里指针没有任何意义。这里有任何流程边界吗?