Visual c++ 转换32位非托管VC++;投影到64位

Visual c++ 转换32位非托管VC++;投影到64位,visual-c++,Visual C++,我正在32位环境中工作。我有一个包含一组C#项目和一组VC++非托管项目的解决方案。对于所有C#项目,构建平台已设置为“任意CPU”,对于VC++项目,它是Win32。我们正在迁移到64位平台。 现在我的问题是 1) 我可以在32位环境中将32位VC++DLL转换为64位吗 2) 是否有一种方法可以将VC++项目的平台也设置为“任何CPU” 3) 我在VS2008中打开了Build菜单下的Configuration Manager。将活动解决方案平台设置为任何CPU(我之前没有将其更改为仅设置为

我正在32位环境中工作。我有一个包含一组C#项目和一组VC++非托管项目的解决方案。对于所有C#项目,构建平台已设置为“任意CPU”,对于VC++项目,它是Win32。我们正在迁移到64位平台。 现在我的问题是

1) 我可以在32位环境中将32位VC++DLL转换为64位吗

2) 是否有一种方法可以将VC++项目的平台也设置为“任何CPU”

3) 我在VS2008中打开了Build菜单下的Configuration Manager。将活动解决方案平台设置为任何CPU(我之前没有将其更改为仅设置为该平台),然后我将VC++项目的平台设置为X64。现在我清理了解决方案并尝试重新构建解决方案。VC++项目没有得到构建,因此引用VC++项目的C#项目也没有构建。我尝试独立构建VC++项目,但我遇到了以下错误:“致命错误LNK1112:模块计算机类型X86与目标计算机类型x64冲突

非常感谢您的任何想法和建议

谢谢, 基尔蒂·索马森达拉姆

我可以在32位环境中将32位VC++DLL转换为64位吗

如果您有64位编译器(Visual Studio某些版本的某些版本不包括64位编译器等),那么您当然可以使用32位系统为64位系统编译代码。因为您能够将目标平台设置为x64并编译代码,所以听起来您确实有可用的编译器

如果在32位系统上进行编译,则测试和调试会更加困难。显然,您必须在x64系统上运行测试,因此现在必须使用远程调试器

是否有办法为VC++项目设置平台 还有“任何CPU”之类的东西

<>这对本地C++来说并没有什么意义。本机代码dll肯定是32位或64位代码文件。托管代码可以支持“任何CPU”,因为JIT负责将IL编译成实际的平台操作代码,因此它可以根据需要转换为x86或x64

VC++项目没有得到构建

使用“生成”菜单的“配置管理器”命令检查生成配置。您可能会发现配置中有一个用于x64平台的VC++Dll项目的条目,但未选中“生成”复选框

致命错误LNK112:模块计算机类型X86与目标冲突 机器类型x64

链接器告诉您链接文件的目标是x64(这是您想要的),但输入链接器的模块(文件)是为x86构建的,因此它与该目标冲突。如何解决此问题取决于模块是什么

如果通过编译项目的某个cpp文件而创建的obj文件出现此错误,则问题在于您的项目正在为x86而不是x64编译该cpp文件

更有可能是因为链接到项目的LIB文件(或其他文件)出现此错误,例如来自某个SDK的LIB文件。在这种情况下,修复方法可能是更改项目属性,以便使用正确的(即x64)LIB文件。某些SDK对32位和64位版本的LIB文件使用不同的文件名。其他人对LIB文件使用相同的名称,但将x86和x64版本存储在不同的目录中

一个开始寻找的好地方是项目|属性|链接器。在“常规”选项卡上有一个“附加库目录”字段。其中的任何条目都可能指向x86和x64平台的不同目录(除非使用特定目录同时保存x86和x64文件)。在输入选项卡上有一个“附加依赖项”字段。所有平台中的任何条目都可能相同(除非使用不同的文件名来区分x86和x64文件)


另一个要检查的地方是工具|选项|项目和解决方案| VC++目录。这些设置列出了搜索特定类型文件的各种目录。每个平台都有单独的列表。在您的情况下,您需要检查“库文件”列表。对于x64平台,您需要确保“库文件”列出包含x64版本库文件的指定目录。

对于我自己解决此问题,我发现以下链接非常有用

对我来说,我试图将32位VC++VS2010应用程序转换为64位应用程序

我遇到了一些错误,比如

链接警告lnk4068/未指定机器默认为x86

致命错误LNK112模块计算机类型“x86”与目标冲突 机器类型“x64”

我听从了其他网站的建议,但需要有关目标/机器设置的信息

对我来说,这是一种享受:

项目设置\配置属性\库管理员\常规\目标计算机

旧值:空白(默认为x86) 新值:MachineX64(/MACHINE:X64)


希望这对其他人有所帮助。

如果您没有64位机器可供测试,请不要尝试移植到64位。