Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++;具有c接口的库 我需要在C++中编写一个库,客户端可以使用它在远程服务器上进行一些操作。唯一的事情我还没有做的是:C++库需要一个C接口。让我解释清楚: 从使用此库的客户端,我需要调用如下内容: 整数运算(void*addr); 如果int_C++_C_Linux - Fatal编程技术网

c++;具有c接口的库 我需要在C++中编写一个库,客户端可以使用它在远程服务器上进行一些操作。唯一的事情我还没有做的是:C++库需要一个C接口。让我解释清楚: 从使用此库的客户端,我需要调用如下内容: 整数运算(void*addr); 如果int

c++;具有c接口的库 我需要在C++中编写一个库,客户端可以使用它在远程服务器上进行一些操作。唯一的事情我还没有做的是:C++库需要一个C接口。让我解释清楚: 从使用此库的客户端,我需要调用如下内容: 整数运算(void*addr); 如果int,c++,c,linux,C++,C,Linux,可以在C包装器中使用。您提供了一个方法YourClass\u Create,该方法在内部调用构造函数(使用new),并返回指向类实例的指针;对于客户端代码,这将只是一个不透明的句柄(对于void*,它可能是typedef),传递给C接口的每个函数,以指定它必须在哪个实例上工作(就像stdio中的FILE*) 所有这些函数都必须调用句柄上的相应方法(转换回指向类的指针),并将异常转换为错误代码 正如@jdv Jan de Vaan在他的评论中指出的那样,不要忘记在C包装器代码周围添加必要的#if

可以在C包装器中使用。您提供了一个方法
YourClass\u Create
,该方法在内部调用构造函数(使用
new
),并返回指向类实例的指针;对于客户端代码,这将只是一个不透明的句柄(对于
void*
,它可能是
typedef
),传递给C接口的每个函数,以指定它必须在哪个实例上工作(就像
stdio
中的
FILE*

所有这些函数都必须调用句柄上的相应方法(转换回指向类的指针),并将异常转换为错误代码



正如@jdv Jan de Vaan在他的评论中指出的那样,不要忘记在C包装器代码周围添加必要的
#ifdef
ed
extern“C{}
,否则可能会出现链接器错误。

关键答案已经在下面了。不要忘记<代码>外部“C”{} /Cuth>接口声明。对于一个真实的例子,请检查0MQ库,用C++接口(C++包和C++接口)编写。