【发布时间】:2012-07-20 18:02:20
【问题描述】:
我从一个普通的 C# 控制台程序中收到此错误,该程序正在使用作为 C++ CLI 项目的构建输出生成的 DLL。我有一个简单的DumbThingpublic ref class 和一个静态方法。我想简单地调用该函数或至少实例化一个微小的 DumbThing 对象,并看到 C# 可以调用它从 C++ CLI 生成的 DLL 获取的代码,但它不起作用,因为它引发了一个让我更加困惑的错误:
First-chance exception at 0x000007fefd2acacd (KernelBase.dll) in DumbTest.exe: Microsoft C++ exception: EEFileLoadException * __ptr64 at memory location 0x007fc228..
更新:在原始异常下方,还有另一个第一次机会异常:
First-chance exception at 0x77cace3b (ntdll.dll) in DumbTest.exe: 0xC0000005: Access violation reading location 0xffffffffffffffff.
一位同事向我指出这可能是编译时问题(某些选项),但我没有任何线索可能导致它。谁能提供一些起点提示?
【问题讨论】:
-
您的 C# 项目是否设置为专门针对 64 位进行编译(并不总是一件好事)?项目 --> 属性 --> 构建 --> 平台目标。如果未设置,请尝试将其设置为 x86。
-
第一次机会异常是运行时的事情。您是否能够在 Main 开头的 C# 代码中放置一个断点并在此异常之前到达该断点?这将澄清这是否是加载程序问题。
-
不,在主函数中任何提及哑类都会抛出这个异常,忽略任何断点。那一定是负载问题..但我不知道是什么原因造成的..也许C++生成的dll需要其他程序集? (它在其驻留文件夹中包含所有内容,并且遍历其依赖项不会显示任何肮脏)..
标签: c# c++-cli 64-bit managed dll