Nebula2探秘06-使用Tcl脚本服务I

Nebula2探秘06-使用Tcl脚本服务I

happykevins文

首先介绍一个宏定义nNebulaUsePackage,他的作用是将一个Nebula功能模块中所有的Nebula类全部注册到kernel server中。由于前面的范例只涉及到nkernel包中的内容,而nkernel包会在创建kernel server时自动载入,所以我们在之前的例子中并没有使用过这个宏(本节也没有使用)。

而本节要创建的TclServer是在nnebula包中,我们可以利用需要nNebulaUsePackage宏将nnebula添加到kernel server中,但是nnebula需要依赖到很多其他的包,我们都需要一一添加才能确保编译通过。所以我们只需要将ntclserver添加到kernel server中即可,另外别忘了添加microtcl的静态库。

下面是我定义的两个宏,用于添加单独的模块到kernel server。

///声明使用指定的Module
#definenNebulaUseModule(MODULE)\
externvoid*n_new_##MODULE(void);\
externbooln_init_##MODULE(nClass*,nKernelServer*);

///将指定Module添加到KernelServer
#definenNebulaAddModule(MODULE)\
nKernelServer::Instance()
->AddModule(#MODULE,\
n_init_##MODULE,n_new_##MODULE);

下面是创建和使用tclserver的代码,很简单:

/****************************************************************************/
/*Nebula2-Tutorial06*/
/*UsingTclServerI-创建TclServer&执行tcl脚本*/
/*author:happykevins*/
/****************************************************************************/

///----------------------------------------------------------------------------
///+必要头文件

//nebula2includes
#include"kernel/nkernelserver.h"
#include
"script/ntclserver.h"

//Tutorial工具库:一些通用的宏定义
#include"../NebulaUtils/nutildefs.h"
//Tutorial工具库:Nebula2Kernel信息工具
#include"../NebulaUtils/nkernelinfo.h"

///-必要头文件
///----------------------------------------------------------------------------

///----------------------------------------------------------------------------
///+链接库
#pragmacomment(lib,"wsock32.lib")
#pragmacomment(lib,"d_nkernel.lib")
//TclServer被编译在该库中
#pragmacomment(lib,"d_nnebula.lib")
//Tcl的库(TclServer依赖)
#pragmacomment(lib,"d_microtcl.lib")
///-链接库
///----------------------------------------------------------------------------

///----------------------------------------------------------------------------
///+声明使用的Nebula2Package&Module
//usingntclservermodule
nNebulaUseModule(ntclserver);
///-声明使用的Nebula2Package&Module
///----------------------------------------------------------------------------

///----------------------------------------------------------------------------
///+Application
intmain(intargc,constchar**argv)
{
///创建KernelServer
nKernelServer*ks=n_new(nKernelServer);

///创建Kernel信息工具
nKernelInfoHelperks_info(ks);

///将ntclserver对象加入KernelServer
nNebulaAddModule(ntclserver);
ks_info.LogCLS();

///创建tclserver
nTclServer*tcl=(nTclServer*)ks->New("ntclserver","/sys/servers/script");
ks_info.LogNOH(
"/");

///执行脚本
nStringret;
ret.Clear();
tcl
->Run("puts"UsingTclServerI!"",ret);

ret.Clear();
tcl
->RunScript("bin:../../DataFiles/Scripts/T06_UsingTclServerI.tcl",ret);

ret.Clear();
tcl
->RunFunction("Hello",ret);

///销毁KernelServer
n_delete(ks);

getchar();
return0;
}
///-Application
///----------------------------------------------------------------------------

Tcl脚本中的代码:

#-------------------------------------------------------------------------------
#T06UsingTclServerI-Create&UsingTclServer
#@byhappykevins
#-------------------------------------------------------------------------------

procHello{}{
puts
"HelloNebula2!HelloTclServer!";
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值