c++ - 隔离C库类(C++代码)

标签 c++ c

我使用库来控制设备。该库是用C语言编写的。该库有一个全局变量来保存设备 ID(端口号)。该库提供了一个函数来确定我们使用哪个端口。

initialize(int deviceIndex, int baudrate)

该函数更改全局变量。所有其他函数都使用此全局变量。

我可以用这个库控制一台设备;但是,我想同时控制两个设备。

如果我使用此函数两次,全局变量就会更改,并且我会丢失一台设备。

我用 C++ 编写代码。我想知道有没有办法可以两次使用这个库,就像一个类,我们创建几个对象,甚至每个类的公共(public)变量都是独立的。

编辑:

  1. 有一些依赖于平台的方式。您在哪个平台?

我应该使用 Visual C++ (Windows) 和 Qt C++ (Linux Kubuntu) 编写代码

  • 您可以更改该库的源代码吗?
  • 是的,我可以,但大约有 2000 行和 4 个文件(两个 .c 和两个 .h)

    最佳答案

    I want to know if there is any way to use this library twice.

    在一个进程中只能拥有该库及其符号(全局函数和变量)的一个实例(无论它是静态库还是共享库)。如果您需要多个进程,则生成更多进程。

    您可以将此功能包装在一个类中,这样当您创建该类的对象时,它会自动为您生成一个工作子进程,并且其成员函数使用某种形式的 IPC 与该特定子进程进行通信(例如管道、套接字对、共享内存、文件等。)。

    关于c++ - 隔离C库类(C++代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36653258/

    相关文章:

    c++ - 将数据从数据库正确加载到编辑控件中,以便我可以执行 ADO 查询

    c++ - 此 matlab 代码的 C++ 等效项是什么(fread matlab 与 fread C/C++)?

    c - 使用 fread 和 fwrite .. 数据丢失

    c - 用于对名称列表进行排序的 Perl 脚本,从 C 脚本传递的文件名,然后将排序后的列表传回

    C++:如何查看数组中的元素是否超过某个值?

    c++ - 使用 boost::program_options 的首选跨平台 'main' 定义是什么?

    通过 fork() 在 C 中创建多个进程和模拟

    c - LAPACKs dsyevr 函数(用于特征值和特征向量)不应该是线程安全的吗?

    c++ - C++ 中大于 2^32 的整数使用什么类型?

    c++ - 如何在 C++ 中比较两个 vector 的字符串内容