动态库导出几种示例方式
整理一下最近看代码遇到的动态库导出及调用方式,不一定全,以后待补充:
————————————————————————————————————————————————
新建一个DLL项目后,一般会自动生成如下代码:
如果新建的QT的DLL项目,会是下面这样:
其实标识符_declspec(dllexport)和Q_DECL_EXPORT是一样的:
然后宏定义CMMDATA_EXPORTS_DLL 或者 MATCH_LIB在项目添加后会自动添加到项目配置属性——c++——预处理器当中
接下来需要利用定义的宏定义MATCH_EXPORT(其实直接用上述两个标识符也行)来定义你想导出的类或者函数
导出函数的话:
可以像下面这样:
以C函数的形式导出,不包含传参等信息,这样不支持导出函数的重载,关于导出c++和c的区别见如下链接:
https://blog.****.net/shufac/article/details/25241705
上边那种方式如果到处函数很多,那岂不是要写很多遍?
所以可以换成如下:为什么这么写还不是很明白
导出类:
像这样写:
class CMMDATA_EXPORTS CMM;
就代表把类A导出,接下来就可以定义这个类CMM了哦,
class CMM
{
public:
private:
}
那怎么用导出的函数呢?
有一种动态调用的方式,不需要include .h文件,不需要添加lib库和lib库路径,直接在代码里load动态库dll文件即可,如下:
其中IM_CMMDataInitDialog和IM_ReleaseDialog是两个函数指针,用来接收动态库调用后返回的函数,需要和导出函数的形参一致: