加载Corflags:16位dll进入64位系统的x86应用程序崩溃

时间:2011-04-28 07:22:37

标签: c# dll 64-bit x86-64 loadlibrary

我在项目中使用外部dll。当我尝试在64位计算机上运行应用程序时,它会以FileLoadException崩溃。由于它在32位系统上工作正常,我怀疑dll是32位。但是,将项目的目标平台设置为x68无济于事。

我读了32bit dll in 64bit application in c#Load 32bit DLL library in 64bit application以及其他一些页面告诉我应该将整个应用程序构建为32位进程(这不会打扰我 - 它应该只能在64位窗口上执行) ,但我不知道如何通过设置目标平台,如何在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-assemblies.aspx

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

2 个答案:

答案 0 :(得分:2)

您还可以在64位环境中运行32位应用程序。但是,如果要加载32位DLL,则必须将应用程序构建为32位DLL。您可以通过在“调试”和“释放”模式下将目标平台设置为x86来完成此操作。这应该可以解决你的问题。

答案 1 :(得分:0)

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