我有一个使用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。我怀疑它会起作用,但它需要我有两个不同的安装程序,我不想去那里。任何线索?
答案 0 :(得分:2)
在使用非托管代码进行交互时,您需要确保.Net应用程序在同一子系统(32位或64位)上运行。正如您所说的那样,您加载的DLL是针对x86的,强制.Net仅针对x86平台进行构建。此设置位于项目属性的构建选项卡上。默认值是任何CPU,将设置更改为x86以匹配您的非托管DLL,无论您是在64位还是32位操作系统上运行,都应该没问题。