从DLL

时间:2016-04-22 06:17:00

标签: c++ dll

我正在为boost容器创建一个包装器DLL(map,vecrtor,set ..)。在我的应用程序中,我想将DLL中的C ++对象导出到客户端。所以我有两个导出选项:

  1. 使用(_declspec)dllexport导出C ++类并在客户端中使用。
  2. 提供仅包含纯虚函数的抽象类(如COM中的接口),并仅从DLL中导出单个方法(例如CreateMap)。
  3. 我在客户端广泛使用容器(map,vector ..)。

    任何人都可以帮助我,这将是出口的最佳方法吗?

1 个答案:

答案 0 :(得分:2)

在DLL接口边界处拥有C ++类和STL容器非常脆弱,并且对您的客户端具有很高的约束力:事实上,DLL和客户端EXE都必须使用相同的 VC ++编译器版本构建,并动态链接到CRT的相同风格。

构建导出纯C接口的DLL更安全,更好的做法。请注意,您可以在 DLL边界内使用C ++ (这基本上是许多Win32 C接口API所做的事情)。

作为替代方案,您可以从DLL中导出纯C ++抽象类( interfaces ),这基本上就是COM所做的。

您可能会发现this CodeProject article很有趣。