C# 从32位更改为64位
我在Visual Studio 2012中的解决方案有三个项目。一个WinForms项目和两个VC++项目(库)。最初,所有的开发都是在Windows7 Professional 32位上完成的。但最近,我的系统更新为64位Windows7 Professional 我的应用程序在Active Solution Platform设置为AnyCPU的情况下成功构建并运行。但是当应用程序启动时,我执行了一些调用底层VC++库的操作,应用程序崩溃,dll出现C# 从32位更改为64位,c#,c++,visual-studio-2012,windows-7-x64,C#,C++,Visual Studio 2012,Windows 7 X64,我在Visual Studio 2012中的解决方案有三个项目。一个WinForms项目和两个VC++项目(库)。最初,所有的开发都是在Windows7 Professional 32位上完成的。但最近,我的系统更新为64位Windows7 Professional 我的应用程序在Active Solution Platform设置为AnyCPU的情况下成功构建并运行。但是当应用程序启动时,我执行了一些调用底层VC++库的操作,应用程序崩溃,dll出现FileNotFoundException
FileNotFoundException
那么,我应该将活动解决方案平台更改为x64吗?还是可以保持原样
我已尝试将活动解决方案平台更改为x64。但是dll没有生成。我得到一个错误LNK2019:未解析的外部符号
我以前从未使用过64位。我应该做什么来构建我的应用程序
找不到的符号出现在第三个VC++项目中,该项目是一个静态库
WinForms依赖于dll,而dll依赖于静态库
更新:
当构建配置设置为AnyCPU时,我得到一个
System.BadImageFormatException
。在“附加信息”下,它表示无法加载文件或程序集dll\u name,.
。试图加载格式不正确的程序。AnyCPU平台选项生成独立于CPU的.NET代码。这意味着它将在32位Windows上作为x86代码运行,但在64位Windows上作为x64代码运行
VisualC++没有任何与任何CPU相同的。这些项目必须是32位或64位。假设您的解决方案配置为在选择AnyCPU时将它们构建为32位DLL。这意味着在64位计算机上,.NET代码将以64位运行,但DLL仍将是32位的,并且由于64位进程无法加载32位DLL,因此无法工作
您可以通过将活动解决方案平台设置为x64或将其设置为x86来解决此问题。除非您有特定的原因希望代码以x64的形式运行(例如,它需要更大的地址空间,或者在32位平台上性能不好),否则选择x86通常更简单,因为它可以在32位和64位窗口上运行,并且不需要对最初为32位Windows开发的现有代码进行任何修改还可以在单个解决方案中同时构建32位和64位DLL,并在运行时加载适当的.NET代码。但是,这更复杂。您为什么不告诉我们更多关于您遇到的错误的信息呢。什么符号未解析?除非有令人信服的理由让应用程序以64位模式运行,否则将其保留为32位可能会更简单。这意味着将活动解决方案平台设置为x86.64位进程不能调用32位DLL,反之亦然。您必须确保程序中的所有调用函数都是64位版本。使用64位编译应用程序是唯一的方法(在使用windows时)32位或64位不重要,只要所有内容都匹配即可。