当前位置: 首页 > 面试题库 >

具有C接口的C ++库

诸俊才
2023-03-14
问题内容

我需要用c 编写一个库,客户端可以使用它在远程服务器上执行一些操作。我唯一还没有做的事情是:C

库需要一个C接口。让我更好地解释一下:从使用此lib的客户端中,我需要调用以下内容:int operation(void * addr); 如果int
<0错误,等等。但是该库是c 中的类。所以我的答案是..是否需要一个全局变量在库中保存类的实例?开发C 类的C接口有更好的选择吗?

谢谢建议。


问题答案:

您可以在C包装程序中使用PIMPL习惯用法。您提供了一个YourClass_Create内部调用构造函数的方法(使用new),并返回指向您的类实例的指针;客户端代码,这将只是一个不透明的句柄(也可能是typedefvoid *),要传递给你的C接口的每个函数指定在其实例有工作(就像FILE *stdio)。

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

正如 @ jdv-Jan de Vaan 在其评论中指出的那样,请不要忘记C包装代码周围的必要#ifdefed extern "C" {},否则您可能会遇到链接器错误。



 类似资料:
  • 主要内容:声明接口,接口继承接口可以看作是一个约定,其中定义了类或结构体继承接口后需要实现功能,接口的特点如下所示: 接口是一个引用类型,通过接口可以实现多重继承; 接口中只能声明"抽象"成员,所以不能直接对接口进行实例化; 接口中可以包含方法、属性、事件、索引器等成员; 接口名称一般习惯使用字母“I”作为开头(不是必须的,不这样声明也可以); 接口中成员的访问权限默认为 public,所以我们在定义接口时不用再为接口成员指

  • 一、概述: 在SQLite提供的C/C++接口中,其中5个APIs属于核心接口。在这篇博客中我们将主要介绍它们的用法,以及它们所涉及到的核心SQLite对象,如database_connection和prepared_statement。相比于其它数据库引擎提供的APIs,如OCI、MySQL API等,SQLite提供的接口还是非常易于理解和掌握的。 二、核心对象和接口: 1. 核心对象: 在S

  • 问题内容: c#是否具有Java Runnable接口的等效项? 如果不能,那么如何实现?或者根本不需要? 谢谢。 问题答案: 不。C#处理线程的方式与Java不同。您不必创建Thread类的子类,而只是创建一个新的System.Threading.Thread对象,并向其传递ThreadStart委托(这是工作所在的函数)。

  • 一个接口定义为一种句法的合同,所有类继承接口应遵循。这个接口定义了部分的句法合同“是什幺(what)”和派生类定义了部分的句法合同“怎幺做(how)”。 接口定义的属性,方法和事件,是接口的成员。接口只包含成员的声明。它是派生类定义的成员的责任。它提供一个派生类可以采用的标准的结构。 抽象类在一定程度上服务于同一个目的,然而,它们主要用于基类的方法和派生类中实现的功能。 接口的声明 接口使用关键字

  • 本文向大家介绍C#接口基础,包括了C#接口基础的使用技巧和注意事项,需要的朋友参考一下 示例 接口的功能称为功能的“合同”。这意味着它声明了属性和方法,但没有实现它们。 因此与类接口不同: 无法实例化 没有任何功能 只能包含方法* (属性和事件是内部方法) 继承接口称为“实现” 您可以从1类继承,但可以“实现”多个接口 注意事项: “ I”前缀是用于接口的命名约定。 函数主体将替换为分号“;”。

  • 配置 下面的 includes 和 globals 将会在随后的例子中用到: #include "libs3.h" #include <stdlib.h> #include <iostream> #include <fstream> const char access_key[] = "ACCESS_KEY"; const char secret_key[] = "SECRET_KEY"; co