0

我遇到了一个 DLL 异常:

 response threw exception: Could not load file or assembly  or one of its dependencies. An attempt was made to load a program with an incorrect format.

我有以下 DLL/库组合的所有源代码。我想弄清楚我是否有一个奇怪的组合或者我需要检查什么以确保它运行。我在一个静态库中有一个本机 C++ 代码,它由受管理的 C++ CLR 支持的 DLL 调用。在接下来的点之前,一切似乎都运行良好。

我创建了一个测试 C# EXE 控制台应用程序来调用托管 C++ CLR 支持的 DLL。这按预期工作。当有一个 C# 类库调用这个相同的托管 C++ CLR 支持的 DLL 时引发异常的区别。这是完全支持还是这是引发异常的原因?如果此组合不正确,是否有任何解决方法可以让 C# 类 DLL 调用托管的 C++ CLR 支持的 DLL。

一切都是使用带有 Visual Studio 2012 的 Windows 7 64 位创建的。所有项目都处于发布模式,并选择了 x64 位平台。

4

2 回答 2

1

在我见过的每种情况下,这都是 32 位 C# 应用程序试图加载 64 位 C++ 或 C++/CLI DLL 或 64 位 C# 应用程序试图加载 32 位 C++ 或 C++/命令行 DLL。

我通常采取的下一步是使用 Dependency Walker 加载 C++/CLI dll。Dependency walker 将向您显示您的 DLL 尝试加载的 DLL。在某些情况下,我有一个与 64 位 DLL 同名的 32 位 DLL 首先出现在路径中,因此它会尝试加载错误的 DLL。

请注意,Dependency Walker 将在 64 位 DLL 旁边的图标上显示 64,并将显示一条消息,如下所示:“错误:找到具有不同 CPU 类型的模块。” 在底部的信息框中

于 2013-02-08T19:04:13.693 回答
0

我最好的选择是 c++ dll 编译为 win32 你的 c# dll 设置为任何 CPU 并且你在 64 位系统上运行......

于 2013-02-08T18:59:56.907 回答