将Corflags:16 dll加载到64位系统上的x86应用程序崩溃

本文关键字:系统 x86 崩溃 应用程序 64位 Corflags dll 加载 | 更新日期: 2023-09-27 17:53:18

我在我的项目中使用外部dll。当我尝试在64位机器上运行应用程序时,它会因FileLoadException而崩溃。因为它在32位系统上工作得很好,我怀疑dll是32位的。然而,将项目的目标平台设置为x68并没有帮助。

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

代码就是

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

和QuickFix的东西是从dll。

编辑:

我检查了dll与CorFlags和图形

CLR Header: 2.5
PE        : PE32
CorFlags  : 16

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

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

将Corflags:16 dll加载到64位系统上的x86应用程序崩溃

您也可以在64位环境上运行32位应用程序。但是如果你想加载一个32位的DLL,你必须把你的应用程序构建成一个32位的。您可以通过在"调试"answers"发布"模式下将目标平台设置为x86来实现这一点。这应该能解决你的问题。

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