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

标签 c# c++ exception dll managed

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

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

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

有什么建议吗?

最佳答案

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

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

    Calling Win32 DLLs in C# with P/Invoke

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

关于c# - 从 C# 调用 C++ 时出现 System.AccessViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2361965/

相关文章:

c# - 如何使用 .NET Standard 和 Entity Framework Core 为现有数据库创建 Entity Framework edmx 文件?

C++ 将 wstringstream 传递给另一个函数

c++ - 一个数字只出现一次?

java - 使用具有不同参数的 Jackson for List 将 JSON 映射到 pojo

c# - 部署在 Azure 机器人上没有响应

c# - 保存整个ListView的图像

c++ - 将工作委托(delegate)给父类(super class)的构造函数

javascript - 比较 JavaScript 中处理异常的实现

ios - 照片框架崩溃: 'This application is not allowed to access Photo data.'

c# - 计算字符串 C# 中的单词和空格