Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从32位更改为64位_C#_C++_Visual Studio 2012_Windows 7 X64 - Fatal编程技术网

C# 从32位更改为64位

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

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

我的应用程序在Active Solution Platform设置为AnyCPU的情况下成功构建并运行。但是当应用程序启动时,我执行了一些调用底层VC++库的操作,应用程序崩溃,dll出现
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位不重要,只要所有内容都匹配即可。