【发布时间】:2011-06-01 18:29:21
【问题描述】:
我的产品是一个 C++ 库,它在 Windows 上以 dll 形式分发。它很少使用 c-runtime(基本的 iostream 就是这样),所以我确信所有最新版本的 CRT 都可以。
由于我的客户应该使用我的 dll 构建他的应用程序,我不想将任何特定的运行时版本强加给他。我希望我的 dll 绑定到我的客户端应用程序正在使用的任何运行时库版本(我可以假设他将为他的 CRT 使用动态链接)。毕竟,这不就是动态链接的全部意义吗?这可能吗?
编辑:将 dll 与静态运行时库链接也不起作用,因为静态运行时(来自 dll)和动态运行时(来自客户端应用程序)将混合在一起,这很糟糕。
编辑:我主要要问的是如何告诉运行时加载程序将我的 dll 与应用程序链接的任何 CRT 链接?也许与清单有关? 更一般地说,我的问题是如何构建一个行为良好的 dll,供构建自己的应用程序的客户使用?
编辑:感谢答案中的建议,我已将所有对 std 类的引用转移到我的标题中的内联函数中,并将我的 dll 与静态运行时库链接起来。它现在似乎甚至可以在与不同 CRT 版本链接的应用程序中工作。
【问题讨论】:
-
也许,但我的问题仍然存在。我当然不会做任何可能在某些版本的 CRT 中被破坏的花哨的事情。
-
您不必为了与特定的 CRT 耦合而做一些“花哨”的事情。
-
C++ + DLLs == 痛苦。我强烈建议在 DLL 之间公开 C-only 接口。
-
你的 DLL 不会改变吗?如果是,则无论您选择何种技术,您仍将处理版本。使用 COM 至少使版本非常清晰。