2

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

现在,当我在实际项目中加载它时,它开始给我来自 mini-wrapper DLL 的奇怪 System.AccessViolationException。我在 C# 方面没有经验,也没有在 Windows 下进行托管/非托管 C++ 开发的经验,我只是不明白为什么这应该在 C# 项目中工作,而不是在另一个项目中工作。

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

有什么建议么?

4

1 回答 1

1

这里有一些想法供您尝试,先生...

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

    在 C# 中使用 P/Invoke 调用 Win32 DLL

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

于 2010-04-12T21:17:15.000 回答