从 32 位更改为 64 位
Changing from 32 bit to 64 bit
我在 Visual Studio 2012 年的解决方案有三个项目。一个 WinForms 项目和两个 VC++ 项目(库)。最初所有的开发都是在 Windows 7 Professional 32 位上完成的。但是最近,我的系统更新到了 Windows 7 Professional 64 位。
我的应用程序在将 Active Solution Platform 设置为 AnyCPU 的情况下构建并成功运行。但是当应用程序启动并且我执行了一些调用底层 VC++ 库的操作时,应用程序崩溃并出现 dll 的 FileNotFoundException
。
那么我应该将 Active Solution Platform 更改为 x64 吗?还是保持原样就好了。
我已尝试将 Active Solution Platform 更改为 x64。但 dll 不构建。我得到一个 error LNK2019: unresolved external symbol
我以前从未使用过 64 位。我应该怎么做才能构建我的应用程序?
未找到的符号存在于第三个 VC++ 静态库项目中。
WinForms依赖dll,dll依赖静态库
更新:
当构建配置设置为 AnyCPU 时,我得到 System.BadImageFormatException
。在附加信息下,它说无法加载文件或程序集 dll_name,....
。试图加载格式不正确的程序。
AnyCPU 平台选择构建 CPU 独立的 .NET 代码。这意味着它将 运行 作为 32 位 Windows 上的 x86 代码,但作为 64 位 Windows.
上的 x64 代码
Visual C++ 没有任何等价于 AnyCPU 的东西。这些项目必须是 32 位或 64 位的。据推测,您的解决方案配置为在选择 AnyCPU 时将它们构建为 32 位 DLL。这意味着在 64 位机器上,.NET 代码将 运行ning 为 64 位,但 DLL 仍将是 32 位,并且由于 64 位进程无法加载 32-位DLL,它不会工作。
您可以通过将 Active Solution Platform 设置为 x64 或将其设置为 x86 来解决此问题。除非您有特定的原因希望代码 运行 作为 x64(例如,它需要更大的地址 space,或者它在 32 位平台上表现不佳),否则通常更简单选择 x86,因为它可以在 32 位和 64 位上运行 Windows,并且不需要对最初为 32 位开发的现有代码进行任何修改 Windows.
也可以在单个解决方案中构建 32 位和 64 位 DLL,并在 运行 时间加载合适的 .NET 代码。但是,这个比较复杂。
我在 Visual Studio 2012 年的解决方案有三个项目。一个 WinForms 项目和两个 VC++ 项目(库)。最初所有的开发都是在 Windows 7 Professional 32 位上完成的。但是最近,我的系统更新到了 Windows 7 Professional 64 位。
我的应用程序在将 Active Solution Platform 设置为 AnyCPU 的情况下构建并成功运行。但是当应用程序启动并且我执行了一些调用底层 VC++ 库的操作时,应用程序崩溃并出现 dll 的 FileNotFoundException
。
那么我应该将 Active Solution Platform 更改为 x64 吗?还是保持原样就好了。
我已尝试将 Active Solution Platform 更改为 x64。但 dll 不构建。我得到一个 error LNK2019: unresolved external symbol
我以前从未使用过 64 位。我应该怎么做才能构建我的应用程序?
未找到的符号存在于第三个 VC++ 静态库项目中。
WinForms依赖dll,dll依赖静态库
更新:
当构建配置设置为 AnyCPU 时,我得到 System.BadImageFormatException
。在附加信息下,它说无法加载文件或程序集 dll_name,....
。试图加载格式不正确的程序。
AnyCPU 平台选择构建 CPU 独立的 .NET 代码。这意味着它将 运行 作为 32 位 Windows 上的 x86 代码,但作为 64 位 Windows.
上的 x64 代码Visual C++ 没有任何等价于 AnyCPU 的东西。这些项目必须是 32 位或 64 位的。据推测,您的解决方案配置为在选择 AnyCPU 时将它们构建为 32 位 DLL。这意味着在 64 位机器上,.NET 代码将 运行ning 为 64 位,但 DLL 仍将是 32 位,并且由于 64 位进程无法加载 32-位DLL,它不会工作。
您可以通过将 Active Solution Platform 设置为 x64 或将其设置为 x86 来解决此问题。除非您有特定的原因希望代码 运行 作为 x64(例如,它需要更大的地址 space,或者它在 32 位平台上表现不佳),否则通常更简单选择 x86,因为它可以在 32 位和 64 位上运行 Windows,并且不需要对最初为 32 位开发的现有代码进行任何修改 Windows.
也可以在单个解决方案中构建 32 位和 64 位 DLL,并在 运行 时间加载合适的 .NET 代码。但是,这个比较复杂。