在64位系统上为32位系统崩溃编译的C#程序和C ++ DLL

时间:2010-12-16 09:55:27

标签: c# c++ windows dll 32bit-64bit

我有一个使用DLL的C#应用​​程序,因为我需要C ++来访问user32 API的一些非托管功能(我不能使用PInvoke)。我为x86架构编译了应用程序和DLL,并且在Windows 7 32位上一切正常。现在的问题是,在Windows 7 64位上,当我尝试使用依赖于DLL的功能时应用程序崩溃(但所有其他工作正常)。

我怀疑这是一个32/64位问题,所以我尝试重新编译x64架构的DLL,现在我可以在运行时选择在x86和x64之间加载哪个DLL。但是当我尝试使用依赖于DLL的功能时它仍然崩溃(当我尝试将64位DLL加载到32位程序时这是有意义的)。我还没有尝试过为x64编译应用程序和DLL。我怀疑它会起作用,但它需要我有两个不同的安装程序,我不想去那里。任何线索?

1 个答案:

答案 0 :(得分:2)

在使用非托管代码进行交互时,您需要确保.Net应用程序在同一子系统(32位或64位)上运行。正如您所说的那样,您加载的DLL是针对x86的,强制.Net仅针对x86平台进行构建。此设置位于项目属性的构建选项卡上。默认值是任何CPU,将设置更改为x86以匹配您的非托管DLL,无论您是在64位还是32位操作系统上运行,都应该没问题。