This question already has answers here:
Using C Libraries for C++ Programs
                                
                                    (7个答案)
                                
                        
                                2年前关闭。
            
                    
我最近开始使用C。
我需要开发一个TS3插件,该插件可通过TCP套接字进行控制。
我会使用WebSocket。

我发现了一堆Websockets库,但是这些库仅适用于使用pThread.h的linux。我的TS3插件只能在Windows设备上运行。

offical TS3 SDK Site上标记为


  由ClientLib和ServerLib组成,TeamSpeak 3 SDK是
  作为具有C样式编码接口的共享库提供给
  使开发人员可以直接访问灵活且功能丰富的集合
  简单的API调用即可了解TeamSpeak 3的核心功能。
  通过标准的C接口,TeamSpeak SDK可以轻松实现
  集成到高级编程语言中。无论
  您的应用程序正在使用的技术,将适合使用TeamSpeak SDK。


因此,这意味着我可以轻松地将ts3 api转换为C ++?

最佳答案

您问题的答案,您无需将C库转换为C ++。基本上,您可以链接C库(Linux:.a / .so)或(Win:*。dll),然后将该函数用于相应的模块。

从C ++源中访问C代码


在C ++语言中,提供了“链接规范”,您可以通过该规范声明函数或对象遵循所支持语言的程序链接约定。
对象和函数的默认链接是C ++。对于某些兼容的C编译器,所有C ++编译器还支持C链接。
当您需要访问通过C链接编译的函数(例如,由C编译器编译的函数或用汇编程序编写的函数)时,请声明该函数具有C链接。


声明链接规范

使用以下表示法之一来声明对象或函数具有语言language_name的链接:

例:

extern "C" void howdy(int);
extern "language_name" declaration ;
extern "language_name" { declaration ; declaration ; ... }



第一个符号表示紧随其后的声明(或定义)具有language_name的链接。
第二种表示法表示花括号之间的所有内容都具有language_name的链接,除非另行声明。请注意,在第二种表示法中,在右花括号后不要使用分号。


您可以嵌套链接规范,但括号不能创建作用域。考虑以下示例:

extern "C" {
    void f();              // C linkage
    extern "C++" {
        void g();          // C++ linkage
        extern "C" void h(); // C linkage
        void g2();         // C++ linkage
    }
    extern "C++" void k(); // C++ linkage
    void m();              // C linkage
}


尽管有嵌套的链接说明符,上述所有功能都在同一全局范围内。

在C ++代码中包含C标头

如果要使用带有自己的供C编译器使用的定义标头的C库,则可以将标头放在extern“ C”括号中:

    extern "C" {
        #include "header.h"
    }


旁白:您需要在c头文件中添加此防护,以便在C ++中使用它。

#ifndef __YOURLIB_H_
#define __YOURLIB_H_

#ifdef __cplusplus
extern "C" {
#endif

int sample_func(int n);

#ifdef __cplusplus
}
#endif

#endif


Tutorial to use C lib in C++.

10-04 21:59