原文地址: https://stackoverflow.com/questions/26234327/qlibrary-import-a-class
c++ 的类中方法定位是编译时就完成的,而不是run-time去定位,所以动态加载时无法直接通过类名::函数名的方式调用到类中的方法。
但是这里有一种使用非常广泛的方式。
可以对要导出的类添加一个接口类,做成独立的文件并向外公开。对可能要对外公开的函数都在接口类中做成虚函数。这样通过虚表的方式使其可以再run-time 去进行定位。
再对类添加创建对象函数,返回类型为接口类类型,并通过c语言函数导出。
第三方调用时,将接口类文件添加到对方工程中。用创建对象函数调用,然后就可以进行使用了。
对于类中的静态方法,可以单独提取出来,做成C语言函数。
示例
“interface.h”
class BaseInterface
{
public:
virtual int fun1(){ return 1; }
virtual void fun3() =0;
};
“base.cpp”
class __declspec(dllexport) Base :public BaseInterface
{
virtual int fun1() override
{
return 10;
}
virtual void fun3() override
{
printf("gogog\n");
}
};
__declspec(dllexport) BaseInterface* getBaseObject()
{
return new Base();
}