从32位更改为64位

时间:2015-02-12 04:38:03

标签: c# c++ visual-studio-2012 windows-7-x64

我在Visual Studio 2012中的解决方案有三个项目。一个WinForms项目和两个VC ++项目(Libraries)。最初所有的开发都是在Windows 7 Professional 32 Bit上完成的。但最近,我的系统更新为Windows 7 Professional 64 Bit。

我的应用程序使用设置为AnyCPU的Active Solution Platform成功构建并运行。但是当应用程序启动并执行一些调用底层VC ++库的操作时,应用程序会因为FileNotFoundException而崩溃。

我应该将Active Solution Platform更改为x64吗?或者保持原样可以。

我尝试将Active Solution Platform更改为x64。但是dll并没有构建。我得到error LNK2019: unresolved external symbol

我之前从未使用过64位。我该怎么做才能构建我的应用程序?

第三个VC ++项目中存在未找到的符号,这是一个静态库。

WinForms依赖于dll,而dll依赖于静态库。

更新

当Build Configuration设置为AnyCPU时,我得到System.BadImageFormatException。根据其他信息,它表示无法加载文件或程序集dll_name,....。尝试加载格式不正确的程序。

1 个答案:

答案 0 :(得分:2)

AnyCPU平台选择构建独立于CPU的.NET代码。这意味着它将在32位Windows上作为x86代码运行,但在64位Windows上作为x64代码运行。

Visual C ++与AnyCPU没有任何等价物。这些项目必须是32位或64位。据推测,您的解决方案配置为在选择AnyCPU时将它们构建为32位DLL。这意味着在64位计算机上,.NET代码将以64位运行,但DLL仍将是32位,并且由于64位进程无法加载32位DLL,它不会工作。

您可以通过将Active Solution Platform设置为x64或将其设置为x86来修复此 。除非您有特定原因要求代码以x64格式运行(例如,它需要更大的地址空间,或者在32位平台上运行不佳),选择x86通常更简单,因为这样可行在32位和64位Windows上,并且不需要对最初为32位Windows开发的现有代码进行任何修改。

也可以在单个解决方案中构建32位和64位DLL,并在运行时以适当的方式加载.NET代码。但是,这更复杂。