从32位更改为64位
Changing from 32 bit to 64 bit
我在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代码。然而,这更为复杂。
- 将应用程序从32位移植到64位时出现问题
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 浮点数为 32 位和 64 位二进制表示形式
- 如何在 64 位平台上计算 32 位哈希C++?
- 将代码从 32 位迁移到 64 位时出现问题 Visual Studio 2010
- 我把我的编译器从32位转换为64位,但我仍然不能使用超过2GB:(为什么
- 在node-gip binding.gyp文件中,如何根据系统结构(32位、64位)包含不同的库文件
- 如果在创建对象时创建了 VPTR,那么为什么具有虚拟功能的类的大小在 32 位系统上为 4,在 64 位机器上为 8
- 是否可以使用 Wojciech Mula 算法将 __m256i 个 32 位字而不是 4 个 64 位字存储为弹出计数和结果?
- 将 VS 32 位项目转换为 64
- EDSDK 3.6 macOS - 32 位与 64 位和链接错误
- 如何将C++项目从 32 位迁移到 64 位以支持 MAC OS 10.14(莫哈韦)?
- 将 64 位整数中的每个其他位与 32 位整数进行比较
- 32位到64位:LNK2019错误,如何检索相关信息
- 在QtMultimedia的QAudioFormat中为24位,32位和64位音频选择哪种样本类型(而不是大小)?
- C/C++ 在 32 位和 64 位计算机上可执行
- 在 64 位 Linux armv8 计算机上编译 32 位二进制文件时遇到问题
- 用于 64 位/32 位 IPC 的 POSIX 信号量的替代方案?
- 在 VS 移位中,UINT64 上的左移(64 >移位> 32)位仅 32 位