加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

运送C dll时只暴露出C api

发布时间:2020-12-16 07:11:45 所属栏目:百科 来源:网络整理
导读:我正在编写一个软件,其API仅用于C,因为很容易将C代码与其他软件/客户端链接起来. 然而,实际的程序代码是在C中完成的,使用了所有常见的C功能,例如异常,STL等. 导出的API /标题本身将使用导出“C”关键字以纯C编写. 如果我打算将这个dll提供给那些不了解C的用
我正在编写一个软件,其API仅用于C,因为很容易将C代码与其他软件/客户端链接起来.

然而,实际的程序代码是在C中完成的,使用了所有常见的C功能,例如异常,STL等.

导出的API /标题本身将使用导出“C”关键字以纯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中给出类定义.类定义将放在一些私有头文件中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读