首  页 | 资讯中心 | 网络学院 | 天新汽车 | 天新手机 | 天新游戏 | 软件开发 | 考试认证
品 牌 机 | 笔 记 本 | 服 务 器 | 天新数码 - DC - DV - MP3 - MP4 - GPS - TV | 数字家庭
硬件 DIY - 主板 - CPU - 内 存 - 硬 盘 - 显示器 - 显卡 - 光驱 - 机箱 - 键鼠 - 网络设备
办公设备 | 打 印 机 | 扫 描 仪 | 投 影 仪 | 一 体 机 | 传 真 机 | 路 由 器 | 交 换 机
软件下载 | 驱动下载 | 游戏下载 | 源码下载 | 教程下载 | 站长在线 | 产品中心 | 报价中心
开发首页 | 开发语言 | .Net开发 | Java开发 | Web开发 | 数据库开发 | 移动开发 | 游戏开发 | 企业开发 | 操作系统 | 软件工程
VB VC Delphi PB BCB C++ - ASP.net C# VB.net - J2EE J2SE J2ME EJB - ASP PHP JSP CGI - MSSQL Oracle DB2 MySQL - CodingLife
  您现在的位置:天新网 > 软件开发 > 游戏开发
Nebula2探秘06-使用Tcl脚本服务I
http://dev.21tx.com 2007年05月09日 happykevins

每日文章精萃
.Net:用ASP.NET语法创建Web服务器控件模 Java:Spring 2.0的新特性点评
ASP:访问数据库(2) PHP:在PHP的图形函数中显示汉字
JSP:主流技术的评价之JSP CGI:CGI教学:CGI安全问题(三)
VB:启动Windows程序自动运行(放入到注册 VC:用 VC++ 和 Winsock 实现与 HTTP 服

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。 

Word-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
/// 声明使用指定的Module
#define nNebulaUseModule(MODULE)    \
    
extern void *n_new_##MODULE (void);    \
    
extern bool n_init_##MODULE (nClass *, nKernelServer *);

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

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

/****************************************************************************/
/*    Nebula2 - Tutorial 06                                                    */
/*  UsingTclServer I - 创建TclServer&执行tcl脚本                            */
/*  author: happykevins                                                        */
/****************************************************************************/

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

// nebula2 includes
#include "kernel/nkernelserver.h"
#include 
"script/ntclserver.h"

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

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

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

///----------------------------------------------------------------------------
/// +声明使用的Nebula2 Package&Module
// using ntclserver module
nNebulaUseModule(ntclserver);
/// -声明使用的Nebula2 Package&Module
///----------------------------------------------------------------------------

///----------------------------------------------------------------------------
/// +Application
int main(int argc, const char** argv)
{
    
/// 创建KernelServer
    nKernelServer* ks = n_new(nKernelServer);

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

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

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

    
/// 执行脚本
    nString ret;
    ret.Clear();
    tcl
->Run("puts "Using Tcl Server I!"", ret);

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

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

    
/// 销毁KernelServer
    n_delete(ks);

    getchar();
    
return 0;
}
/// -Application
///----------------------------------------------------------------------------

    Tcl脚本中的代码:

#-------------------------------------------------------------------------------
#        T06 UsingTclServer I - Create & Using Tcl Server
#        @by happykevins
#-------------------------------------------------------------------------------

proc Hello {} {
    puts 
"Hello Nebula2! Hello Tcl Server!";
}

上一篇: Nebula2探秘05-RTTI
下一篇: Nebula2探秘10-Signal System

编辑推荐
相关内容
·卡通渲染的另类勾边方法
·快速8-bit通道的伪HDR的实现
·游戏引擎剖析(十)
·游戏引擎剖析(七)
·游戏引擎剖析(八)
·游戏引擎剖析 9
·游戏引擎剖析 3
·游戏引擎剖析 7
·游戏引擎剖析 8
·认知科学与广义进化论
·数字图像中手写阿拉伯数字的识别技术概览
·at&a语法和intel语法
·Texture Wrapping Mode
·角色扮演游戏引擎的设计原理
·关于飞机射击类游戏的设计原理
·bash版俄罗斯方块
·游戏引擎剖析(五)
·游戏引擎剖析(六)
·游戏引擎剖析 6
·游戏引擎剖析 4
最近更新
人气最热
·Nebula2探秘05-RTTI
·Nebula2探秘10-Signal System
·Nebula2探秘11-Simple Window
·解析XML的利器-TinyXML
·Nebula2探秘13-输入管理器nInputServer
·Nebula2探秘12-基于Windows命令行的Nebula
·向量几何在游戏编程中的使用6
·3D角色动画
·3D 中的方位 (读书笔记)
·做QQ桌球游戏外挂——求游戏中的彩球圆心坐
·游戏策划全接触之游戏剧本篇-----原创
·基于LOD的大规模真实感室外场景实时渲染技
·PhysX SDK物理引擎开发包使用教程
·图形学-降噪技术-2维中值滤波
·GBA程序开发入门3
·DXUT 框架入门 1
·The Art of Computer Game Design--ACKNOWL
·3dMax导出.x文件以及3D Explorer
·Shader Model 3 Using Vertex Texture 顶点
·模拟布料运算之后的心得介绍。

 
·[硬件]Linksys54M家用顶极无线路由卖价540
·[数码]影音娱乐之王 iAudio A2节前直降200元
·[汽车]西安市场日产西玛促销优惠幅度高达2万
·[开发]使用 Apache Jakarta POI 从多个数据库
·[资讯]调侃 你所使用的浏览器反映出了你的人
·[游戏]RO情侣的福音—来自太平洋的惊喜
·[本本]372回:笔记本上安装Vista系统的全过程
·[办公]工作娱乐两不误 富可视X2入门级投影机
·[手机]手机藏病菌量超过马桶 应适时给手机"SP
·[考试]Photoshop CS之简历封面设计制作
·[学院]CSS实例:横线样式的输入框
·[娱乐]梦
 

关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2008 , www.21tx.com , All Rights Reserved .
© 晨新科技 版权所有 Created by TXSite.net