用c接口的c ++库

我需要用c ++编写一个库,客户端可以在远程服务器上执行一些操作。 在具体的唯一的事情我还没有做到这一点:C ++库需要一个C接口。 让我更好地解释:从客户端使用这个lib我需要做的事情就像这样:int operation(void * addr); 如果int <0错误等等。但是,它是一个在C ++类的库。 所以我的答案是..需要我一个全局variables持有库中的类的实例? 开发这个C ++类的C接口是更好的select吗?

Thx在build议答案。

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

所有这些功能将要做的就是调用句柄上的相应方法(转换回到你的类的指针),并将异常转换为错误代码。


正如@ jdv-Jan de Vaan在他的评论中指出的那样,不要忘记围绕你的C包装代码必要的#ifdef ed extern "C" {} ,否则你可能会得到链接错误。