如果你需要调用未解密的C++函数extern "C",那么你必须自己从C++程序中完成.您可以在项目中创建一个单独的C++文件,该文件包含您在extern "C"项目其余部分使用的函数中所需的所有库函数.你必须告诉autotools你正在使用C和C++.文件扩展名应该足以决定哪个是哪个.
举个例子,考虑以下mymagic.cc为libmagicC++编写的一些创建绑定:
#include <libmagic/magic.hh>
extern "C" {
int doMagic() {
magic::Wizard w("foo", 42);
magic::Result res = w.doMagic();
return res.getResultCode();
}
}
Run Code Online (Sandbox Code Playgroud)
对于您的应用程序的其余部分,doMagic()将显示为另一个C函数.但内部是C++,所以它可以使用你想要的任何C++结构.当你需要从库中传递东西时,你应该使用指向不透明类型的指针.因此,在mymagic.h您的C代码也使用的标题中,您可以编写
struct magicValue;
int doMagic(void);
struct magicValue* createMagic(void);
void destroyMagic(struct magicValue*);
Run Code Online (Sandbox Code Playgroud)
然后mymagic.cc你会更明确地说:
struct magicValue {
magic::value v;
magicValue(magic::value val) : v(val) { }
};
magicValue* createMagic() {
return new magicValue(magic::value("foo"));
}
void destroyMagic(magicValue*) {
delete magicValue;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |