C++ 动态加载动态库 调用库中类 及类中方法

原文地址: 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();
}



猜你喜欢

转载自blog.csdn.net/qiushangren/article/details/80853019