C++集成脚本--UCScript
来源:互联网 发布:手机换彩铃用什么软件 编辑:程序博客网 时间:2024/05/03 03:05
使用UCScript作脚本,主要是因为它几个特点很适合用于集成(脚本引擎体积小,占用资源少,运行快,跨平台跨语言,与宿主语言交互方便),而且它的语法类C语言,不用去多学一门语言。在C++中集成UCScript脚本是轻而易举的事。我们接下来用实例来说明,如何把UCScript脚本集成到你的程序中去。
1. 创建UCScript引擎
ucScript ucs; 或者 ucScript* ucs= new ucScript;
创建一个ucScript对象,就是创建一个UCScript脚本引擎。可以创建任意多个脚本引擎,甚至可以分布在不同的线程当中。
注意:指定合适的预定义,Windows用_UC_WIN,Linux用_UC_LINUX(即编译参数-D_UC_LINUX)。如果以动态库的形式使用脚本,还得指定_UC_IMPORT。
2. 执行脚本程序 你可以从缓冲区中装载脚本,也可以直接解析文件:
const char * szCode="ret 1+2*3;";
ucScript ucs;
ucCalcVar vRet= ucs.Parse(szCode);
assert(vRet.value.iVal == 7);
如果你想对你的源代码进行保护而不是赤裸裸的袒露在大家的眼前,或者提高脚本性能,你可以把脚本编译成二进制中间码。
3. 如何让脚本调用C++的函数。比如让脚本以string: get_peername(int: id)的形式调用我的C++代码,代码可以写成:
UCSFUNC3(get_peername,CVT_STRING, "get peer name by peer id",
CVT_INTEGER,"puid",
CVT_STRING,"def=/"unknown/"",
1)
{
int puid;
// get an integer value from the first parameter
ucAdaptCVT::cvt2out(params[0], puid);
CPeer * p=CPeerMgr::Instance().GetPeer(puid);
if(p) {
return p->m_PeerInfo.name; // return the string of name
}
const char * def="unknown";
if(count>1) {
ucAdaptCVT::cvt2out(params[1], def); // get default name specified by parameter
}
return def;
}
上面代码用了UCSFUNC(xxx) 辅助宏,定义在ucScriptFunc.h头文件。其中xxx表示脚本变量类型个数(即返回值和参数的个数)。上例的宏参数分别表示:
get_peername 函数名字 CVT_STRING 函数返回值的类型为string 函数的提示信息 在脚本集成开发环境ucDev可以看到 CVT_INTEGER 第一个参数,类型为integer 参数的提示信息 用在ucDev CVT_STRING 第二个参数,类型string 参数提示信息 用在ucDev 1 有 1 个参数有默认值,即最后一个参数
脚本调用如下:
string: strName;
strName = get_peername(12); // Kevin's ID is 12, so strName = "Kevin"
strName = get_peername(-1); // none, strName = "unknown"
strName = get_peername(-1, "no user"); // none, strName = "no user"
最让我激动的是,该脚本把非标准类型的变量全部当作object类型,也就是说任何C++类型都可以接受。下面例子演示如何传递和返回非基本类型的变量。
UCSFUNC2(get_parentwnd, CVT_OBJECT, "get a parent window",
CVT_OBJECT,"wnd",
0)
{
ucCalcVar vRet(CVT_OBJECT);
CWnd * pWnd=NULL;
// get CWnd from parameter
ucAdaptCVT::cvt2out(params[0], pWnd);
if(pWnd && ::IsWindow(pWnd->GetSafeHwnd()) )
{
ucAdaptCVT::out2cvt(pWnd->GetParent(), vRet);
}
return vRet;
}
4. 结束语
UCScript是一种面向集成的脚本语言,上面例子是针对C++语言,还支持的其他语言有C#(.Net),Java,Delphi,Visual Basic等等。脚本开发工具可以从http://www.ucscript.com/view_download.asp?id=3下载。初学者可以从http://www.ucscript.com/download.asp下载脚本用户手册。
- C++集成脚本--UCScript
- UCScript——C++集成脚本
- XCode集成shell脚本
- ossec集成自定义脚本
- eclipse集成spket脚本开发
- Redis集成Lua脚本实现
- C脚本
- Python与C集成
- CodeBlocks集成Objective-C
- ODI与BAM集成自动配置集成脚本注意事项
- 在C++中集成Lua脚本(LuaWrapper )
- 在C++中集成Lua脚本
- 如何在C++中集成Lua脚本
- 在c++中集成lua脚本
- 在C++中集成Lua脚本
- 在C++中集成Lua脚本
- C#脚本实践(三): 集成到游戏
- Robotium_Robotium自动化脚本与Hudson集成
- JavaScrip简述
- Paper Outline and a template
- ReportX表格组件2.0a
- 中国程序员会不会给爸爸妈妈磕头
- Ajax+Table
- C++集成脚本--UCScript
- ReportX2.0.0.0和以前的版本有什么区别?
- 成员函数指针——为什么那么复杂?
- 打印小片断
- WINDOWS2000/XP无驱动得到RING0权限
- xmlHttp学习
- 一种导致不明确引用的原因
- .net中压缩和解压缩的研究
- 关于开源