从 C++ 托管 dll 抛出的 C# 异常 - EEFileLoadException * __ptr64

标签 c# c++-cli 64-bit managed dll

我在一个普通的 C# 控制台程序中收到此错误,该程序正在使用作为 C++ CLI 项目的构建输出生成的 DLL。我有一个带有静态方法的简单 DumbThing public 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++/CLI 项目,请确保您的 C# 项目已相应地设置其平台。 C# 项目的默认值是“Any CPU”,这会导致 JIT 编译器在 64 位架构上生成 x64 代码。如果您的 C++/CLI 项目是为 x86 构建的,则无法将其加载到 64 位计算机上的 x64 进程中。

关于从 C++ 托管 dll 抛出的 C# 异常 - EEFileLoadException * __ptr64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584626/

相关文章:

c++-cli - C++/CLI x64 WindowsForms 应用程序的入口点 (VS 2015)

c++ - C++/CLI 中的值类

64-bit - 解决 macports 安装 'conflict'

c# - Neo4j 单实例连接

.net - 字典与 KeyPairValue 的使用

c++ - x64 汇编、ret 寄存器和变量

android - 如何在 google play 上将 android 应用程序限制为 64 位平台下载

c# - 使用 C# 访问私有(private) Google 电子表格

c# - 将数据保存在多个 ViewModel 使用的文件中

c# - 带有链接 OLAP 服务器的 SqlCommand.ExecuteScalar 不返回任何值