我有一个C++库,提供各种用于管理数据的类.我有库的源代码.
我想扩展C++ API以支持C函数调用,以便库可以同时与C代码和C++代码一起使用.
我正在使用GNU工具链(gcc,glibc等),因此语言和体系结构支持不是问题.
有什么理由说明技术上不可能吗?
是否有任何疑难杂症的,我需要注意?
是否有关于此的资源,示例代码和/或文档?
我发现的其他一些事情:
#ifdef __cplusplus
extern "C" {  
#endif  
//  
// Code goes here ...  
//  
#ifdef __cplusplus  
} // extern "C"  
#endif
Run Code Online (Sandbox Code Playgroud)
#ifndef __cplusplus #error东西可以帮助检测任何疯狂.对于结构体,请遵循以下形式,以便C不会混淆.
typedef struct X { ... } X
Run Code Online (Sandbox Code Playgroud)然后使用指针传递C++对象,它们只需要在C中声明为struct X,其中X是C++对象.
所有这一切都是由一位C++精灵的朋友提供的.
Gre*_*ill 67
是的,这当然是可能的.您需要在C++中编写一个接口层,用于声明函数extern "C":
extern "C" int foo(char *bar)
{
    return realFoo(std::string(bar));
}
Run Code Online (Sandbox Code Playgroud)
然后,您将从foo()C模块调用,该模块将调用传递给realFoo()在C++中实现的函数.
如果需要使用数据成员和方法公开完整的C++类,那么您可能需要比这个简单的函数示例做更多的工作.
Ale*_*x B 22
C++ FAQ Lite:"如何混合C和C++代码".
在这些问题的答案中描述了一些问题:
ejg*_*ttl 11
主要问题:无法在C语言中捕获异常.如果C++代码中存在异常上升的可能性,请非常仔细地编写C代码或C++包装器.相反,C代码中的异常机制(即longjump)(如各种脚本语言中所见)不需要为堆栈上的C++对象调用析构函数.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           75048 次  |  
        
|   最近记录:  |