2017-04-22 88 views
1

我最近从C开始。
我需要开发一个TS3插件,它通过一个tcp套接字进行控制。 我会使用WebSocket。
我发现了一堆Websockets库,但这些仅适用于使用pThread.h的Linux。而我的TS3插件只能在Windows设备上运行。

它标记在offical TS3 SDK Site将C库转换为C++库

由...组成的ClientLib和ServerLib,的TeamSpeak 3 SDK是 与C风格编码接口传送作为共享库 为开发人员提供直接访问所述柔性以及使用简单API调用的TeamSpeak 3核心功能的功能丰富的套件 。 通过标准的C接口,TeamSpeak SDK可以很容易地集成到高级编程语言 中。无论什么 技术应用程序正在使用中,TeamSpeak SDK会格格不入。

因此,这意味着我可以伊斯利转换TS3 API为C++?

+2

假设它写得很好的C,C API的*是*你的C++ API。如果你想上课和其他的东西,你必须自己做。 – InternetAussie

+0

这篇文章http://stackoverflow.com/questions/12066279/using-c-libraries-for-c-programs可能会帮助你。 – Scab

回答

1

对于你的问题的答案,你不需要将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 ; ... } 
  • 第一个符号表示声明(o紧随其后的是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编译器,您可以在外部的“C”括号内的头:

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

SIDENOTE:为了在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++.