c++ - 运送仅暴露 C api 的 C++ dll

标签 c++ c dll

我正在编写一个软件,其 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/

相关文章:

c++ - 内联代码应该有多小

c++ - 用于匹配 C++ 字符串常量的正则表达式

c++ - 全局 bool 变量在全局销毁期间是否可靠?

c++ - 如何在 C\C++ 中将位图作为帧写入 Ogg Theora?

c - 将数字添加到链接列表时出错

winforms - 在运行时调用多线程 DLL

c++ - 如何在 C++ 中构建与运行时版本无关的 DLL?

使用 PCL 时私有(private)函数的 C++ 继承

iOS Mach-O – 使 __TEXT 段暂时可写

c# - 如何从 C# 调用带有结构指针参数的 C++ 函数?