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

Exporting functions from a DLL using __declspec(dllexport)

本文关键字:DLL 函数 declspec dllexport 使用      更新时间:2023-10-16

我正在进行一个项目(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();

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

是否应该导出程序的所有函数?

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

如果导出了每个函数,则需要对每个函数进行文档记录。但是,库使用者可能不需要许多函数。许多功能对于图书馆的实施是私有的。

更重要的是,通过导出所有函数,您将使库的未来开发更加困难。如果您想将接口更改为导出的其中一个专用函数,该怎么办?您必须引入另一个具有不同名称的函数,或者使用现有名称,从而破坏二进制向后兼容性。这两种选择都没有特别的吸引力。

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