1

我在我的项目中使用了一个外部 dll。当我尝试在 64 位机器上运行该应用程序时,它会以FileLoadException. 由于它在 32 位系统上运行良好,我怀疑 dll 是 32 位的。但是,将项目的目标平台设置为 x68 并没有帮助。

在 c# 中的 64 位应用程序中读取 32 位 dll 并在 64 位应用程序中加载32 位 DLL 库和其他一些页面,这些页面告诉我应该将整个应用程序构建为 32 位进程(这不会打扰我 - 它应该可以在 64 位 Windows 上执行),但如果不是通过设置目标平台,我不知道如何在 64 位开发机器上构建 32 位应用程序...

代码只是

static void Main(string[] args)
{
    var mf = new QuickFix43.MessageFactory();
    Console.WriteLine("running");
    Console.ReadKey();
}

QuickFix 的东西来自 dll。

编辑: 我用 CorFlags 检查了 dll 并发现

CLR Header: 2.5
PE        : PE32
CorFlags  : 16

这意味着 dll 是一个混合模式程序集,只能在 i386 环境中加载(http://blogs.msdn.com/b/slessard/archive/2010/04/09/types-of-managed-code -组件.aspx

是否可以在 64 位环境中加载它?

4

2 回答 2

2

您还可以在 64 位环境中运行 32 位应用程序。但是如果你想加载一个 32 位的 DLL,你必须将你的应用程序构建为 32 位的。您可以通过在“调试”和“发布”模式下将目标平台设置为 x86 来做到这一点。这应该可以解决您的问题。

于 2011-04-28T07:28:08.607 回答
0

好的,这就是答案。问题实际上不是我的项目无法加载本机 dll。问题是我的项目调用了一个托管 dll,该 dll 调用了有问题的本机 dll。我项目的目标平台设置为 x68,但托管 dll 编译为“任何 cpu”。使用 x68 重新编译中间托管 dll 工作。

于 2011-04-29T08:46:10.070 回答