从32位更改为64位

Changing from 32 bit to 64 bit

本文关键字:64位 32位      更新时间:2023-10-16

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

我的应用程序在Active Solution Platform设置为AnyCPU的情况下成功构建和运行。但是,当应用程序启动时,我执行了一些调用底层VC++库的操作,应用程序会崩溃,并为dll提供FileNotFoundException

那么,我应该将活动解决方案平台更改为x64吗?或者保持原样可以吗?

我已尝试将活动解决方案平台更改为x64。但是dll没有建立。我得到一个error LNK2019: unresolved external symbol

我以前从未使用过64位。我应该做些什么来构建我的应用程序?

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

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

更新:

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

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代码。然而,这更为复杂。