我正在编写一个软件,其 API 仅适用于 C,因为很容易将 C 代码链接到其他软件/客户端。
然而,实际的程序代码是用 C++ 完成的,使用了所有常用的 C++ 功能,如异常、STL 等。
导出的 API/ header 本身将使用 export "C"
关键字用纯 C 语言编写。
如果我打算将此dll 交付给对他们这边没有C++ 知识的用户,我应该注意什么?通常他们不应该关心实际代码是用 C++ 编写的,只需要知道如何通过头文件链接到 C 代码。 我被告知我应该确保 libstd 是静态链接的,这在所有平台上都是不可能的(将有一个 linux 和一个 windows 构建)。异常(exception)情况如何?等等
最佳答案
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
你不需要在你的公共(public) api 中给出类定义。 类定义将放在一些私有(private) header 中。
关于c++ - 运送仅暴露 C api 的 C++ dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29883482/