2010-03-02 28 views
2

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

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

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

有什么建议吗?

+0

真正的项目是否意味着另一台机器?我的意思是,你是否尝试在不同的环境中使用你的dll? – 2010-03-02 11:46:44

+0

不同的C#项目,但同一台机器。 – tunnuz 2010-03-04 11:19:13

回答

1

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

  1. 很难知道怎么回事准确,但我会尝试做的第一件事就是删除此托管C++ DLL从混合。这可能是令人困惑的事情。这里的某个地方感觉就像管理和非管理世界之间的数据没有被正确编组。另外,仅仅因为它不会从控制台崩溃,并不意味着代码工作正常,它仍然可能会破坏,只是不会触发访问冲突。我想看看是用对的第一件事/调用,直接打电话给你的非托管的DLL,如果它打破了,你应该知道很快:

    Calling Win32 DLLs in C# with P/Invoke

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

相关问题