发信人: Anan (Anan), 信区: BBS_DEV
标 题: FireBird BBS中采用动态载入技术的探讨
发信站: 沧海逐浪 (2000年04月14日09:00:40 星期五), 站内信件
在BBS采用动态载入技术,特别是游戏,可以减轻系统负担,也便于
增加新功能,这里给出一种很简陋的方法:
以下修改基于FB2000pre0407.tar.gz
1.修改comm_lists.c,加入以下函数:
#include <dlfcn.h>
int exec_mbem();
int exec_mbem(char *s)
{
void *hdll;
int (*func)();
char *c;
char buf[1024];
strcpy(buf,s);
s=strstr(buf,"@mod:");
if(s)
if(s)
{
c=strstr(s+5,"#");
if(c)
{ *c=0;
c++; }
hdll=dlopen(s+5,RTLD_LAZY);
if(hdll)
{
if(func=dlsym(hdll,c ? c : "mod_main"))
func();
dlclose(hdll);
}
else {
clear();
prints(",模块 [%s] 载入失败!!\n\n",s+5);
prints("失败原因:%s",dlerror());
pressanykey(); }
}
}
2.修改comm_lists.c中sysconf_cmdlist
2.修改comm_lists.c中sysconf_cmdlist
加入
{"RunMBEM",exec_mbem,0},
3.修改Makefile
LIBS后加入-rdynamic
4.修改要调用的模块
此处使用hightmanBBS中的chicken.c,这个不用修改
这样编译
gcc -o chicken.so -shared chicken.c
5.copy chicken.so 到BBSHOME/so/下
6.修改menu.ini,加入
@RunMBEM 0, 0, PERM_SYSOP, "E@mod:so/chicken.so#
chicken_main","(T)est" 动态载入测试
#后是要调用的函数名
thant's ok
--
FROM 202.119.32.102