c代码调用c++类的方法

时间:2021-04-06 19:30:44

有如下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);

}