传送仅公开 C API 的 C++ dll

Shipping a C++ dll with only a C api exposed

本文关键字:C++ dll API 传送      更新时间:2023-10-16

我正在编写一个API仅是C的软件,因为很容易将C代码与其他软件/客户端链接起来。

然而,实际的程序代码是用C++完成的,使用所有常见的C++功能,如异常、STL 等。

导出的 API/标头本身将以纯 C 编写,带有 export "C" 关键字。

如果我打算将此 dll 交付给不了解C++的用户,我应该警惕什么?通常,他们不应该关心实际代码在C++中的事实,只需要知道如何通过头文件链接到C代码。有人告诉我,我应该确保libstd是静态链接的,这可能不是在所有平台上都可行的(会有Linux和Windows构建)。例外情况如何?等

1)将标题包装在:

#ifdef __cplusplus
extern "C" {
#endif

2)制作不透明的指针:

struct myInternalStructFOO; // incomplete type
typedef struct myInternalStructFOO *cFOO; // public type
class myInternalClassBAR; // incomplete type
typedef class myInternalClassBAR *cBAR; // public type

您无需在公共 API 中提供类定义。类定义将放在一些私有标头中。