plugin是什么意思

更新时间:2022-12-31 23:49:50 阅读: 评论:0


2022年12月31日发(作者:bock)

C++插件接⼝开发

如何开发⼀个⾼效可⽤的多插件运⾏程序?插件接⼝是关键。

设计⼀个⾼效可⽤的插件接⼝,会让程序节省很多资源和时间。

设计插件接⼝是⼀件容易的事,但设计⼀个⾼效的插件就不是⼀件容易的事。现在学习⼀下本公司⽼⼤的设计插件的⽅式以及思路。

插件⼀般来说要么是动态库要么是静态库,那么多个同级插件可以使⽤统⼀接⼝来进⾏实现。打开动态库的⽅式⼀种是静态链接⼀种动态打

开。

⼀般来说静态链接就是在编译的时候把所有的动态库⽤'-L'全部链接编译进去,这是⼀个死⽅法,意思说我只能加载⼀定的模块,想要再加

那么就得从新编译⼀下程序。这种⽅式⼀般在代码动态开发中是不可取的(这种情况在动态库固定且很少的情况下使⽤)。

如果要开发可配置且能动态的加载程序所需要的插件,那么Windows就是⽤

HINSTANCEhDllInst=LoadLibrary("");

MYFUNCyouFuntionNameAlias=NULL;//youFuntionNameAlias函数别名

youFuntionNameAlias=(MYFUNC)GetProcAddress(hDllInst,"youFuntionName");

⽅式在程序中打开就可以了。

Linux⽤

void*dlopen(constchar*filename,intflag);//打开动态库

void*dlsym(void*handle,char*symbol);//获取功能函数

constchar*dlerror();

intdlclo(void*handle);//关闭

在这⾥通过配置⽂件添加设置动态库,配置⽂件⾃⼰可以随意设计,然后⽤vector将配置⽂件中要加载的动态库名称记录下来,然后再循环

读取加载插件模块。

公共接⼝设计⽰例:

#ifndefPLUGIN_H

#definePLUGIN_H

#ifdefined(WIN32)||defined(_WIN64)

#definePLUGIN_APIextern"C"__declspec(dllexport)

#el

#definePLUGIN_APIextern"C"

#endif

classplugin

{

public:

plugin(){};

~plugin(){};

virtualvoidinit();//初始化功能

virtualvoidfunc1();//公共功能函数1

virtualvoidfunc2();//功能函数2

};

/*插件获取当前动态库对象,每个插件必须实现*/

PLUGIN_APIplugin*create_instance();

#endif

/*

plugin*create_instance()

{

plugin*XXXpugin=newxxxclass();//new⼀个插件对象进⾏返回

returnXXXpugin;

}

*/

根据接⼝我们就可以实现⾃⼰想要的插件了。

在程序中再将动态打开的插件⽤list进⾏关联存储(listplugin_list)。后⾯如果你想使⽤某个插件的时候直接调⽤

就ok了。

本文发布于:2022-12-31 23:49:50,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/68617.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:exo无限挑战
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图