Visual studio 2010 VS2010本机多目标

Visual studio 2010 VS2010本机多目标,visual-studio-2010,multitargeting,multi-targeting,Visual Studio 2010,Multitargeting,Multi Targeting,我的Win7开发机器上安装了VS2005、VS2008和VS2010。我有一个特别的项目,它使用第三方DLL,当EXE项目由VS2010生成时(当目标是v100或v90工具集时),在LoadLibrary()调用期间会出现异常。当直接由VS2005或VS2008生成时,它可以完美地工作 根据李绍(微软)2009年的博客: 我应该能够打开VS2010项目,将平台工具集从v100更改为v90,然后VS2010将实际使用VS2008编译器、头文件和库来构建程序。如果是的话,那么它就做得不“正确”,因

我的Win7开发机器上安装了VS2005、VS2008和VS2010。我有一个特别的项目,它使用第三方DLL,当EXE项目由VS2010生成时(当目标是v100或v90工具集时),在LoadLibrary()调用期间会出现异常。当直接由VS2005或VS2008生成时,它可以完美地工作

根据李绍(微软)2009年的博客:

我应该能够打开VS2010项目,将平台工具集从v100更改为v90,然后VS2010将实际使用VS2008编译器、头文件和库来构建程序。如果是的话,那么它就做得不“正确”,因为当以这种方式构建项目时,DLL将不会加载。我试图查看构建日志以验证使用了哪个编译器,但日志中没有路径或版本号,因此这是一个失败

这是一个直接写入Wi32 APIs的普通C(不是C++,不是MFC,不是.NET)项目。有什么方法可以让它工作,或者我只是在一个项目中使用不同的编译器(组成整个系统的100多个编译器中的一个)

救命啊

看看水仙花:

安装Daffodil后,您将能够使用VS 2010使用较旧版本的库构建项目。

看看Daffodil:


安装Daffodil后,您将能够使用VS 2010使用旧版本的库构建项目。

我想我已经解决了这个问题。看起来,虽然VS2010将愉快地运行VS2008编译器、链接器等,但VS2010将而不是让项目单独运行。当项目导入到VS2010时,命令行中添加了一些新的默认设置,显然,其中至少有一个与VS2008不同,足以使我使用的DLL无法加载

当我将数据执行预防(DEP)的高级链接器设置从“是”(默认设置)更改为“否”时,我的程序又开始工作了!事实上,我甚至不再需要使用v90工具集进行编译——整个问题都是由/NXCOMPAT链接器命令行开关的新默认值引起的。/NXCOMPAT开关甚至没有在VS2005 IDE(创建项目的位置)的项目设置中引用,但在VC8 bin文件夹中运行“link/?”表明该开关是已知的,默认值为


太糟糕了,VisualStudioIDE没有包含一个默认设置列表,这些默认设置是在新版本中被更改的项目使用的。如果这太困难,导入器应该使用旧的默认值指定更改的设置,否则项目导入不正确,不是吗?

我想我已经解决了这个问题。看起来,虽然VS2010将愉快地运行VS2008编译器、链接器等,但VS2010将而不是让项目单独运行。当项目导入到VS2010时,命令行中添加了一些新的默认设置,显然,其中至少有一个与VS2008不同,足以使我使用的DLL无法加载

当我将数据执行预防(DEP)的高级链接器设置从“是”(默认设置)更改为“否”时,我的程序又开始工作了!事实上,我甚至不再需要使用v90工具集进行编译——整个问题都是由/NXCOMPAT链接器命令行开关的新默认值引起的。/NXCOMPAT开关甚至没有在VS2005 IDE(创建项目的位置)的项目设置中引用,但在VC8 bin文件夹中运行“link/?”表明该开关是已知的,默认值为


太糟糕了,VisualStudioIDE没有包含一个默认设置列表,这些默认设置是在新版本中被更改的项目使用的。如果这太困难,导入器应该使用旧的默认值指定更改的设置,否则项目导入不正确,不是吗?

LoadLibrary异常是什么?另外,您使用的是32位还是64位?jeffery:下面是一个示例,说明了当错误被触发时调试器记录的内容:“mcr2.exe中0x00515210处的第一次机会异常:0xC0000005:访问冲突。”实际地址不同,但消息的其余部分不变。所有内容都编译为32位,但如果需要的话,都是在64位Windows 7下运行的。LoadLibrary例外是什么?另外,您使用的是32位还是64位?jeffery:下面是一个示例,说明了当错误被触发时调试器记录的内容:“mcr2.exe中0x00515210处的第一次机会异常:0xC0000005:访问冲突。”实际地址不同,但消息的其余部分不变。所有内容都编译为32位,但如果需要的话,它都在64位Windows 7下运行;还可以创建我们的程序的工作副本;VS2010已经知道/理解了(?)开箱即用,我不知道为什么我想在组合中添加更多的新软件。特别是因为我预计VS2010构建VS2005 LIB时会遇到与构建VS2008 LIB时相同的问题。但无论如何,谢谢你,我可能会不顾一切地去尝试它。FWIW,当我意识到水仙花只是VS2010的一些配置设置时,我尝试了一下。不幸的是,我得到了我预期的结果:失败。看起来,即使在根据旧的工具集进行构建时,VS2010也会对正在构建的程序执行某些操作,导致我们正在使用的DLL在调用LoadLibrary()加载时触发异常。直接使用VS2008/2005编译不会导致同样的问题,因此这绝对是一个VS2010问题。我可能需要得到VS2012,看看itt是否也有同样的问题