有如下c++ so库,我们只看得到它的头文件
cpplib.h:
#ifndef CPP_LIB_H
#define CPP_LIB_H
class MyClass
{
public:
MyClass();
~MyClass();
void func();
}
#endif
我们需要在main.c中创建这个类并调用它的func方法,怎么办?
加个adapter就可以了,需要实现cadapter.h和cadapter如下:
cadapter.h:
#ifndef CADAPTER_H
#define CADAPTER_H
extern "c"{
typedef void* MYHANDLE;
MYHANDLE myclass_new();
void myclass_del(MYHANDLE handle);
void myclass_func(MYHANDLE handle);
#endif
};
cadapter.cpp:
#include "cpplib.h"
#include "cadapter.h"
MYHANDLE myclass_new();
{
return new MyClass;
}
void myclass_del(MYHANDLE handle)
{
delete ((MyClass*)handle);
}
void myclass_func(MYHANDLE handle)
{
((MyClass*)handle)->func();
}
做好上面的adapter以后, 我们就可以在main.c里这样调用:
#include "cadapter.h"
void test()
{
MYHANDLE handle = myclass_new();
myclass_func(handle);
myclass_del(handle);
}