1

我的 Win7 开发机器上安装了 VS2005、VS2008 和 VS2010。我有一个使用 3rd 方 DLL 的特定项目,当 EXE 项目由 VS2010 构建时(在针对 v100 或 v90 工具集时),它在 LoadLibrary() 调用期间出现异常。当直接由 VS2005 或 VS2008 构建时,它可以完美运行.

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

http://blogs.msdn.com/b/vcblog/archive/2009/12/08/c-native-multi-targeting.aspx

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

这是一个直接写入 Win32Apis 的纯 C(不是 C++,不是 MFC,不是 .NET)项目。有什么办法可以让这个工作,还是我只是为单个项目使用不同的编译器(在整个系统的 100 多个项目中)?

帮助!

4

2 回答 2

1

看看水仙花:http ://daffodil.codeplex.com/

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

于 2012-10-04T20:45:29.923 回答
0

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

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

太糟糕了,Visual Studio IDE 不包含在新版本中已更改的项目正在使用的默认设置列表。如果这太难了,导入器应该使用旧的默认值指定更改的设置,否则项目导入不正确,不是吗?

于 2012-10-05T19:58:35.487 回答