我有一个C ++ DLL。有没有办法编译它,以便它可以与VS2005 / 2008/2010一起使用,而不是我必须做3种不同的构建?
由于
答案 0 :(得分:3)
如果你只是链接到它,你通常可以在任何版本的Visual Studio中“使用”C ++ dll。
但是,在编译dll时,它将针对特定版本的C ++运行时,因此程序的最终用户需要在其PC上安装该运行时(Visual C ++可再发行组件包)。因此,如果您使用由VS2005构建的DLL和由VS2010构建的exe,您的最终用户将必须安装2005和2010可再发行组件包。如果您使用它们(MFC等),其他库通常也是如此
如果这样做,您还必须小心内存分配 - 在一个运行时版本中分配的内存不能被另一个运行时版本安全地释放。因此,您的dll分配的任何内容也必须由dll释放,并且您的exe分配的任何内容都不能被dll解除分配。
因此,大多数人会使用相同版本的VS重建dll,因为他们构建了其余的程序,以最大限度地减少兼容性问题 - 最终在VS的每个版本中构建都比在整理中更容易所有涉及的问题都没有这样做。
(提示:您可以从命令行运行VS并使其构建项目/解决方案,因此编写一个批处理脚本可以一次性自动构建所有三个变体,这是一个5分钟的工作)
答案 1 :(得分:0)
正在使用的visual studio版本对于是否可以引用给定的程序集没有任何区别。
唯一重要的是汇编编译的框架版本。假设它无论如何都是.net程序集。
无论如何,通常的做法是提供针对每个框架rev(2.0,3.5和4.0)编译的版本。
但是,如果你正在编译一个非托管的c ++ dll;然后只提供该dll的32位和64位版本。在这种情况下,正在使用的.net版本(以及可视化工作室版本)并不重要。