荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjk (Welcome to InstallBBS,Linux!), 信区: InstallBBS
标  题: [转载] 采用动态加载模式调用外部模块           leaper (转寄)
发信站: 荔园晨风BBS站 (Thu Dec 13 14:55:28 2001), 转信

【 以下文字转载自 jjk 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: everlove (飞呀飞), 信区: BBSMan_Dev
标  题: 采用动态加载模式调用外部模块
发信站: BBS 水木清华站 (Sat Aug 18 10:55:12 2001)

发信人: 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

--
加入
※ 来源:·沧海逐浪 bbs.dlmu.edu.cn·[FROM: bbs]

--

--

※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.119.32.102]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店