【问题标题】:Crash when using C# Assembly from Managed C++ DLL从托管 C++ DLL 使用 C# 程序集时崩溃
【发布时间】:2009-07-21 11:02:38
【问题描述】:

在 Windows XP 系统上,我正在编写一个托管 C++ 库,它调用 C# 程序集中的代码。不幸的是,一旦我开始在 C# 程序集中引用一个符号,运行托管 C++ 库就会失败并出现此错误(我从 XP 崩溃对话框中复制了这个):

EventType : clr20r3
P1 : treeviewdemo.exe
P2 : 0.0.0.0
P3 : 4a5d6d62
P4 : system.windows.forms
P5 : 2.0.0.0
P6 : 4889dee7
P7 : 12fc     
P8 : ac
P9 : system.io.filenotfoundexception    

Manged C++ 库基本上就是:

#using "C:\\MyCSharpAssembly.dll";

__declspec(dllexport) void callMangagedCode() {
  ManagedObject ^o = nullptr;
}

“#using”本身似乎没有造成任何问题,但是一旦我开始使用 C# DLL 中的符号,我就会遇到问题。有人知道怎么回事吗?

system.io.filenotfoundexception 部分让我觉得找不到某些 DLL,但我不知道它在寻找哪个或在哪里。

【问题讨论】:

  • 您是否尝试过从另一个 C# 应用程序调用该方法?如果错误是可重现的,以获得更好的异常信息..

标签: c# c++ dll crash managed


【解决方案1】:

MyCSharpAssembly.dll 的所有依赖项是否在同一路径上可用?如果您不确定,请尝试在 ILDasm 工具中加载 C-Sharp 程序集,以了解其依赖项。

作为健全性检查,还要检查是否可以从另一个 C-Sharp 可执行文件加载此 C-Sharp DLL。

【讨论】:

  • 谢谢!事实证明,它确实是 MyCSharpAssembly.dll 的依赖项之一。但是,问题更复杂:依赖项与 DLL 位于同一路径中是不够的,但它们需要位于 .exe 文件的路径中(我想这与“APPBASE”属性有关)。接受这个答案,因为它为我指明了正确的方向。
【解决方案2】:

找不到文件?

没有找到 C# 程序集?

复制到windows或者system32试试

如果失败,尝试注册

【讨论】:

    【解决方案3】:

    您可以访问 C# 程序集源代码吗?您可以在调试器中运行托管 C++ 代码吗?查看异常的堆栈跟踪是值得的,这可能会为您提供更多关于异常发生时发生的情况的提示。

    我怀疑崩溃可能与您正在执行的操作有关。正如 Aamir 提到的,另一种可能性可能是 C# 程序集的依赖项......

    【讨论】:

      猜你喜欢
      • 2011-10-28
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      相关资源
      最近更新 更多