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

问题描述:

我在我的项目中使用外部DLL。当我尝试在64位机器上运行该应用程序时,它与FileLoadException崩溃。由于它在32位系统上工作正常,我怀疑该DLL是32位。但是,将项目的目标平台设置为x68不会有帮助。加载Corflags:64位系统上的x86应用程序崩溃16 dll

我读32bit dll in 64bit application in c#Load 32bit DLL library in 64bit application和其他一些网页,告诉我应该建立整个应用程序作为32位进程(这不会打扰我 - 它应该只是在64位Windows可执行文件),但我不知道如何通过设定目标平台构建一个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位环境中加载?

+0

可能的复制到:http://*.com/questions/5478904/32bit-dll-in-64bit-application-in-c – BitKFu 2011-04-28 07:36:47

+0

人们通过回答你的问题来帮助你。删除这将导致他们失去声望。如果您的问题已通过其他方式解决,请在解决方案中留下答案,并在可用选项变为可用时进行选择。这有助于那些有类似问题的人,并且不会惩罚那些试图帮助你的人。 – Will 2011-04-28 13:37:53

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

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

+0

我已经做到了,没有成功。刚刚编辑我的问题,它可能是一个16位的DLL?! – 2011-04-28 07:38:29

+0

我不认为,该DLL构建为16位一个..你可以发布PE头类型? – 2011-04-28 12:11:32

+0

另外,你是否在正确的工作目录中执行?看看这个:http://*.com/questions/5743895/dllnotfound-exception-when-i-use-glut-functions-in-my-dll/5743961#5743961 – 2011-04-28 12:19:10