繁体   English   中英

在VC ++ 2008项目中使用VC ++ 2010运行时库

[英]Use VC++ 2010 runtime libraries in VC++ 2008 project

我致力于优化算法,因此性能非常重要。 与VS 2008相比,在VS 2010中编译时,该算法的速度提高了约8倍。谷歌搜索显示这不是我的错(参见例如https://stackoverflow.com/a/5560184/890355 )。 问题是最终项目必须在VS 2008下构建。

我倾向于在VS 2010中将我的算法构建为DLL,然后将其链接到主项目。 是否可以在VS 2008下使用VC ++ 2010运行时库和我的DLL? 如果是这样,那么最痛苦的方法是什么? 还有其他想法吗? 谢谢。

运行时不是问题。 没有什么能阻止您将DLL与VC2010运行时链接,然后在其他项目中使用该DLL。 如果这些项目是使用Visual C ++ 2008或任何其他语言构建的,则无关紧要。

棘手的部分是设计DLL接口。 简单地导出一些C ++类是有风险的,因为它会让您暴露出不同编译器之间的不兼容性。 我认为最好的办法是公开C风格的界面或使用COM。 我认为COM是最好的方法,但如果你不熟悉这项技术,那么C风格的界面就能正常运行。 (如果界面很简单,COM也可能被过度杀死。)

如果你要求使用任何其他方法将2008和2010库组合在一个可执行文件中,而不是将2010部分外部移动到DLL中,那么答案可能是“没有其他简单的方法可以实现这一点”。

但是,如果您不想“VC 2008 2010运行时库......在VS 2008下”(即在旧版2008 IDE中针对2010库构建),而是“在2008编译的程序中使用2010编译的DLL” ,这是完全可能的。

正如我们在项目中所做的那样,最简单的方法是针对静态链接的标准库(MFC,如果您使用它)构建(.exe和DLL),然后在.exe中使用LoadLibrary来加载DLL。 在DLL中,您可以导出( _declspec (dllexport) )函数(最好在extern "C" {}内部),并在.exe到GetProcAddress使用它。

静态链接和显式加载可以避免因不同运行时导致的大量不一致错误。

如果您担心DLL加载和函数调用成本,您可以尝试尽可能少地进行这些调用(可能不仅要移动算法,还要移动更高级别的逻辑到DLL中)。 看到这个也是。

您可以使用本机多目标在一个IDE(2010)中构建所有代码(但是您仍然需要分别针对v9和v10库分别构建主应用程序和DLL)。

如果您小心,可以使用MS文档提供一些提示。 我在此之前已经回答了这个问题:

想知道Visual Studio的低版本是否可以使用使用更高版本的visual studio构建的dll?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM