在Windows 7 64位上构建Visual Studio 2008 Express C ++ 32位

时间:2011-04-08 13:17:43

标签: c++ visual-studio-2008 windows-7 32bit-64bit

我正在使用Visual Studio 2008 Express。我有一个解决方案,曾经在Vista 32位上运行良好。我最近切换到Windows 7,其中一部分停止工作。这是我的设置: - 非托管C ++静态库,“库” - 包含“库”功能的托管C ++ DLL,用于C#,“DLL” - 引用“DLL”的托管C ++控制台应用程序 - 引用“DLL”的C#应用​​程序

我在运行C#应用程序时遇到DLL抛出的异常,我通常通过托管C ++控制台应用程序调试这样的问题,因为我可以进入非托管库代码。

问题是我现在得到一个弹出对话框,其中包含一些奇怪的符号以及“C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ dw20.exe”的路径,以及然后,当我尝试运行托管C ++控制台应用程序时,我的应用程序捕获异常“System.BadImageFormatException:不是有效的Win32应用程序”。我花了很多时间研究这个问题,任何甚至远远类似于有用建议的东西都指的是用C#构建X86项目,但没有关于C ++的东西。我尝试将 / MACHINE:X86 添加到库的Librarian选项中,但这似乎不起作用。

我想简而言之,我的问题是,如何确保我的非托管C ++静态库构建,以便它可以在32位系统上运行?

2 个答案:

答案 0 :(得分:4)

dw20.exe程序是“Doctor Watson”,该程序报告未处理的运行时异常和崩溃。不是问题的根源,只是信使。虽然问题没有说明,但我必须假设您的Windows 7版本是64位,这是System.BadImageFormatException的常见来源。

异常是由尝试加载为32位构建的DLL的64位进程引起的。或者反过来说,32位进程无法加载64位DLL。该过程的位数由EXE(您的案例中的C ++ / CLI应用程序)决定。它没有选项可以通过简单的项目设置来更改它,就像C#项目那样。您可以通过添加平台来实现,“x64”使用64位编译器并生成64位可执行文件。我很确定在C ++ Express版本中不可用,但是你没有64位编译器,所以必须始终生成一个32位可执行文件。

这几乎没有空间来解释异常。如果您在C#类库项目中更改了Platform目标设置,则只会出错。从x86或AnyCPU到x64。将其更改回AnyCPU。 Project + Properties,Build选项卡。如果您已经做了任何事情来破解Express版本的限制,比如从SDK版本中添加64位编译器,那么这也是问题根源的主要危险信号。

答案 1 :(得分:0)

将任何CPU的内置更改为32或86,您应该没有问题。你可能在c ++代码中使用的是windows 32 dll,这就是为什么它在其他平台上不起作用的原因。 任何CPU->配置管理器然后更改为32或86