仅使用公开的C api运送C ++ dll

lez*_*lon 5 c c++ dll

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

但是,实际的程序代码是使用所有常见的C ++功能(如异常,STL等)在C ++中完成的。

导出的API /标头本身将使用带有export "C"关键字的纯C语言编写。

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

ffe*_*rri 1

1)将你的标题包裹在:

#ifdef __cplusplus
extern "C" {
#endif
Run Code Online (Sandbox Code Playgroud)

2)制作不透明指针:

struct myInternalStructFOO; // incomplete type
typedef struct myInternalStructFOO *cFOO; // public type

class myInternalClassBAR; // incomplete type
typedef class myInternalClassBAR *cBAR; // public type
Run Code Online (Sandbox Code Playgroud)

您无需在公共 api 中给出类定义。类定义将放在一些私有标头中。