使用__declspec(dllexport)从DLL导出函数

时间:2014-02-24 10:29:07

标签: c++ visual-studio-2012 dll dllexport

我正在开发一个项目(VS 2012解决方案),包括joystic.cpp。项目已创建为DLL,以便能够从另一个项目调用库。应用程序通过对话框计时器以独占模式接收即时的游戏手柄数据,并在对话框中显示它们。

我用宏编辑了resource.h文件:

#ifdef LIBRARY_EXPORTS
#    define LIBRARY_API __declspec(dllexport)
#else
#    define LIBRARY_API __declspec(dllimport)
#endif

为了能够通过订购导出功能:

LIBRARY_API function();

但是,我是否应该导出该程序的所有功能?

1 个答案:

答案 0 :(得分:0)

  

我是否应该导出该程序的所有功能?

通常在设计库的接口时,您应该只导出库的使用者所需的功能。

如果您导出了每个功能,那么您需要记录每个功能。但是,库消费者可能不需要许多功能。许多函数将是私有的库的实现。

更重要的是,通过导出所有功能,您将使图书馆的未来发展变得更加困难。如果要将接口更改为导出的其中一个私有函数,该怎么办?您必须要么引入另一个具有不同名称的函数,要么使用现有名称,以便打破二进制向后兼容性。这些选项都没有特别吸引人。

从本质上讲,图书馆公共界面的表面积越大,维护任务就越大。因此,您通常的目标是提供尽可能小的公共接口,为库消费者提供所需的功能。