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进⾏关联存储(list
就ok了。
本文发布于:2022-12-31 23:49:50,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/68617.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |