从托管C ++ DLL使用C#程序集时崩溃

时间:2009-07-21 11:02:39

标签: c# c++ dll crash managed

在Windows XP系统上,我正在编写一个Mangaged 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,但我不知道它在哪个或哪里看。

3 个答案:

答案 0 :(得分:5)

MyCSharpAssembly.dll的所有依赖关系是否都在同一条路径上?如果您不确定,请尝试在ILDasm工具中加载C-Sharp程序集,以找出它的依赖关系。

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

答案 1 :(得分:0)

找不到文件?

没有找到C#程序集?

将其复制到windows或system32并尝试

如果失败,请尝试注册

答案 2 :(得分:0)

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

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