??xml version="1.0" encoding="utf-8" standalone="yes"?> 目前我公司开发的Nexus Engine的底层对象序列化使用了TinyXML来读写XML文g。TinyXML有两个不爽的地方Q一是它的接口用FILE*Q另外一个是它对 wchar_t不能很好的支持。前阵子看Boost库的更新中多了一个PropertyTreeQ他在处理XML时用C另外一个小的库 –RapidXML。既焉接的是Boost库的一部分Q所以是值得一试的。于是找到其官方|站Q?a title=http://rapidxml.sourceforge.net/ target=_blank>http://rapidxml.sourceforge.net/Q研I了一番。一看之下,甚是满意Q也推荐l大家看看! 首先是速度Q据它自己宣U比TinyXML?0?0倍,比Xerces DOM?0?00倍!详细的测试比较请见其用户手册Q?a title=http://rapidxml.sourceforge.net/manual.html target=_blank>http://rapidxml.sourceforge.net/manual.htmlQ的“4. Performance ”一节?/p>
其次它的设计非常的简z,只依赖于标准库中的几个基本的cR它的输入输出都是字W串Q这样很好,一个库应该关注自己核心的内容Q做量的事情。它的API其实和TinyXML倒是有几分相|用过TinyXML的h应该很容易上手: TinyXML主要接口c? RapidXML的主要接口类 下面q是看一个具体的例子来体验一下,下面是TinyXML官方教程中创建XML文档的一D代码: void build_simple_doc( ) 下面是用RapidXML实现cM功能的代码: void build_simple_doc_by_rapidxml() xml_node<>* node = string text; // write text to file by yourself 下面是用RapidXML分析XML的样例代码: void parse_doc_by_rapidxml(char* xml_doc) xml_node<> *node = doc.first_node(“Hello”); 前两天有朋友问,我的SlimXml有没有和RapidXmlҎ(gu)q效率?我是W一ơ听说这个库Q更不用说对比效率了Q于是上他们|站看了下?/p>
好家伙,居然L?a target=_blank>TinyXml?0?0倍,而且?a >Boost.PropertyTree的默认xml解析器?/p>
于是有点好奇Q因Z前也没有特别兛_qSlimXml的效率?/p>
于是分别下蝲了TinyXml-2.6.1和RapidXml-1.13Q迅速用vc8建立了两个测试工E,在系l中?#8221;*.xml”Q找C一个比较合适的试文g。它_大(1.5MQ,utf-8~码q且包含?英文Q有一定层ơ深度,大约3.3万行。测试文件可?a target=_blank>从这里下?/span> 试对象是三个库从内存字W串解析xml的函敎ͼq样能排除从盘上读文gq种不稳定因素的q扰Q而且RapidXml貌似只支持从内存里解?/p>
要说明的是,RapidXml的这个parse是一个模板函敎ͼ必须l一个flag的参敎ͼ我测试的时候给的是默认? 试l果Q解析这?.3万行Q?.5M大小的xmlQ三个库分别׃ l论是,RapidXml果然很强(zhn),居然比我的SlimXml?倍多。但是ƈ没有如作者所说比TinyXml?0~60倍,只有不到15倍。据说对比用的是一个约50k大小的xml文gQ可惜ƈ没有提供下蝲Q不然可以验证一下?/p>
比较ƣ慰的是Q在我ƈ没有很关注效率的情况下,SlimXml仍然比TinyXml?.5倍。SlimXml走的是简单小巧\U,源代码只?2kQ而TinyXml和RapidXml的源码分别是147k?41kQ有q样的效率可以满意了。在我有很多I闲以前Q估计我也不会再M化它Q因个库主要q是针对几十上百行的文Ӟ解析特别大的xml不在我考虑的范围之内?/p>
以下是RapidXml提供的常见xml库效率对照表Q其中还很牛d提供了和strlen()函数的效率对?/p>
我估计RapidXml速度快的主要原因是对memory pool的用,毕竟在解析过E中需要创建大量的stringQ可以想象用memory pool和直接走默认的new很容易生超q一个数量的效率差异?/p>
自从用了xml后对他是又爱又恨,他的能代替配置文g,但是当文件容量大C定量的时候灾隑ְ降?比如d一?0M的xml文g,往往d׃10U?解析再花?0U?q要占用大量内存I间,十分头痛.所以实际项目中都会xml再{Zq制文g来处?但是xml的灵zL的很方便,如果rapidxml能接q二q制的速度,当然太好啦,q没有测试过,下面是一些介l?
貌似tinyxml会遇到unicode障碍,rapidxml不会,如果目要做多语a版本必面临解册个问?..
rapidxml是一个快速的xml库,官方|站Q?http://rapidxml.sourceforge.net/Q根据manual看到Q他竟然比tinyxml快了50-100?br>
TinyXML主要接口c?/strong>
RapidXML的主要接口类
class TiXmlDocument
template<class Ch = char>
class xml_document
class TiXmlNode
template<class Ch = char>
class xml_node
class TiXmlAttribute
template<class Ch = char>
class xml_attribute
{
// Make xml: <?xml ..><Hello>World</Hello>
TiXmlDocument doc;
TiXmlDeclaration * decl = new TiXmlDeclaration( “1.0″, “”, “” );
TiXmlElement * element = new TiXmlElement( “Hello” );
TiXmlText * text = new TiXmlText( “World” );
element->LinkEndChild( text );
doc.LinkEndChild( decl );
doc.LinkEndChild( element );
doc.SaveFile( “madeByHand.xml” );
}
{
xml_document<> doc;
xml_node<>* decl = doc.allocate_node(node_declaration);
xml_attribute<>* decl_ver =
doc.allocate_attribute(“version”, “1.0″);
decl->append_attribute(decl_ver);
doc.append_node(decl);
doc.allocate_node(node_element, “Hello”, “World”);
doc.append_node(node);
rapidxml::print(std::back_inserter(text), doc, 0);
}
{
xml_document<> doc; // character type defaults to char
doc.parse<0>(xml_doc); // 0 means default parse flags
string node_val = node->value();
}
]]>
]]>
Lua脚本语法说明Q增加lua5.1部䆾Ҏ(gu))
Lua 的语法比较简单,学习h也比较省力,但功能却q不弱?br> 所以,我只单的归纳一下Lua的一些语法规则,使用h方便好查可以了。估计看完了Q就懂得怎么写LuaE序了?br>
在Lua中,一切都是变量,除了关键字?br>
I. 首先是注?br> 写一个程序,L不了注释的?br> 在Lua中,你可以用单行注释和多行注释?br> 单行注释中,q箋两个减号"--"表示注释的开始,一直gl到行末为止。相当于C++语言中的"http://"?br> 多行注释中,?--[["表示注释开始,q且一直gl到"]]"为止。这U注释相当于C语言中的"/*...*/"。在注释当中Q?[["?]]"是可以嵌套的Q?span style="COLOR: red">在lua5.1中,中括号中间是可以加若q个"="LQ如 [==[ ... ]==]Q,见下面的字符串表C明?br>
II. Lua~程
l典?Hello world"的程序L被用来开始介l一U语a。在Lua中,写一个这LE序很简单:
print("Hello world")
在Lua中,语句之间可以用分?Q?隔开Q也可以用空白隔开。一般来_如果多个语句写在同一行的话,L用分号隔开?br> Lua 有好几种E序控制语句Q如Q?br>
控制语句
格式
CZ
If
if 条g then ... elseif 条g then ... else ... end
elseif 1+2~=3 then print("true")
else print("false") end
While
while 条g do ... end
Repeat
repeat ... until 条g
For
for 变量=初? l点? 步进 do ... end
For
for 变量1, 变量2, ... 变量n in 表或枚D函数 do ... end
注意一下,for的@环变量L只作用于for的局部变量;当省略步q值时Qfor循环会?作ؓ步进倹{?br> 使用break可以用来中止一个@环?br> 相对C语言来说QLua有几个地Ҏ(gu)明显不同的,所以面要特别注意一下:
Q?strong>语句?/strong>
语句块在C中是?{"?}"括v来的Q在Lua中,它是用do ?end 括v来的。比如:
do print("Hello") end
可以?函数 中和 语句?/strong> 中定局部变量?br>
Q?strong>赋D?/strong>
赋D句在Lua被强化了。它可以同时l多个变量赋倹{?br> 例如Q?br> a,b,c,d=1,2,3,4
甚至是:
a,b=b,a -- 多么方便的交换变量功能啊?br> 在默认情况下Q变量L认ؓ是全局的。假如需要定义局部变量,则在W一ơ赋值的时候,需要用local说明。比如:
local a,b,c = 1,2,3 -- a,b,c都是局部变?br>
Q?strong>数D?/strong>
和C语言一P支持 +, -, *, /。但Luaq多了一?^"。这表示指数乘方q算。比?^3 l果?, 2^4l果?6?br> q接两个字符Ԍ可以?.."q处W。如Q?br> "This a " .. "string." -- {于 "this a string"
Q?strong>比较q算
比较W号
<
>
<=
>=
==
~=
含义
于
大于
于或等?/td>
大于或等?/td>
相等
不相{?/td>
所有这些操作符Lq回true或false?br> 对于TableQFunction和Userdatacd的数据,只有 == ?~=可以用。相{表CZ个变量引用的是同一个数据。比如:
a={1,2}
b=a
print(a==b, a~=b) --输出 true, false
a={1,2}
b={1,2}
print(a==b, a~=b) --输出 false, true
Q逻辑q算
and, or, not
其中Qand ?or 与C语言区别特别大?br> 在这里,请先CQ在Lua中,只有false和nil才计ؓfalseQ其它Q何数据都计算为trueQ?也是trueQ?br> and ?or的运结果不是true和falseQ而是和它的两个操作数相关?br> a and bQ如果a为falseQ则q回aQ否则返回b
a or bQ如?a 为trueQ则q回aQ否则返回b
丑և个例子:
print(4 and 5) --输出 5
print(nil and 13) --输出 nil
print(false and 13) --输出 false
print(4 or 5) --输出 4
print(false or 5) --输出 5
在Lua中这是很有用的特性,也是比较令hh的特性?br> 我们可以模拟C语言中的语句Qx = a? b : cQ在Lua中,可以写成Qx = a and b or c?br> 最有用的语句是Q?x = x or vQ它相当于:if not x then x = v end ?br>
Q运符优先U,从低到高序如下Q?br>
和C语言一P括号可以改变优先U?br>
or
and
< > <= >= ~= ==
.. (字符串连?
+ -
* / %
not #(lua5.1 取长度运?/span>) - (一元运?
^
III. 关键?br> 关键字是不能做ؓ变量的。Lua的关键字不多Q就以下几个Q?br>
and
break
do
else
elseif
end
false
for
function
if
in
local
nil
not
or
repeat
return
then
true
until
while
IV. 变量cd
怎么定一个变量是什么类型的呢?大家可以用type()函数来检查。Lua支持的类型有以下几种Q?br>
Nil
I|所有没有用过的变量,都是nil。nil既是|又是cd?/td>
Boolean
布尔|只有两个有效|true和false
Number
数|在Lua里,数值相当于C语言的double
String
字符Ԍ如果你愿意的话,字符串是可以包含"\0"字符的(q和C语言L?\0"l尾是不一LQ?/td>
Table
关系表类型,q个cd功能比较强大Q请参考后面的内容?/td>
Function
函数cdQ不要怀疑,函数也是一U类型,也就是说Q所有的函数Q它本n是一个变量?/td>
Userdata
嗯,q个cd专门用来和Lua的宿L交道的。宿主通常是用C和C++来编写的Q在q种情况下,Userdata可以是宿ȝL数据cdQ常用的有Struct和指针?/td>
Thread
U程cdQ在Lua中没有真正的U程。Lua中可以将一个函数分成几部䆾q行?/span>如果感兴的话,可以ȝ看Lua的文档?br>现在回过头来看看Q倒觉得不是线E类型。反而象是用来做遍历的,象是Iterator函数?br>如:
local i = 0
while(i < n) do
coroutine.yield( i )
i = i + 1
end
end
V. 变量的定?br> 所有的语言Q都要用到变量。在Lua中,不管在什么地方用变量,都不需要声明,q且所有的q些变量L全局变量Q除非我们在前面加上"local"。这一点要特别注意Q因为我们可能想在函数里使用局部变量,却忘了用local来说明?br> 至于变量名字Q它是大写相关的。也是_A和a是两个不同的变量?br> 定义一个变量的Ҏ(gu)是赋倹{?Q?操作是用来赋值的
我们一h定义几种常用cd的变量吧?br> A. Nil
正如前面所说的Q没有用过的变量的|都是Nil。有时候我们也需要将一个变量清除,q时候,我们可以直接l变量赋以nil倹{如Q?br>
var1=nil -- h?nbsp;nil 一定要写
B. Boolean
布尔值通常是用在进行条件判断的时候。布?yu)值有两种Qtrue ?false。在Lua中,只有false和nil才被计算为falseQ而所有Q何其它类型的|都是true。比?Q空串等{,都是true。不要被 C语言的习惯所误导Q?在Lua中的的确是true。你也可以直接给一个变量赋以Booleancd的|如:
theBoolean = true
C. Number
在Lua中,是没有整数类型的Q也不需要。一般情况下Q只要数g是很大(比如不超q?00,000,000,000,000Q,是不会生舍入误差的。在WindowsXP能跑的当今主PC上,实数的运ƈ不比整数慢?br> 实数的表C方法,同C语言cMQ如Q?br> 4 0.4 4.57e-3 0.3e12 5e+20
D. String
字符ԌL一U非常常用的高cd。在Lua中,我们可以非常方便的定义很长很长的字符丌Ӏ?br> 字符串在Lua中有几种Ҏ(gu)来表C,最通用的方法,是用双引h单引h括v一个字W串的,如:
"That's go!"
?br> 'Hello world!'
和C语言相同的,它支持一些{义字W,列表如下Q?br> \a bell
\b back space
\f form feed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\" double quote
\" single quote
\[ left square bracket
\] right square bracket
׃q种字符串只能写在一行中Q因此,不可避免的要用到转义字符。加入了转义字符的串Q看h实在是不敢恭l_比如Q?br> "one line\nnext line\n\"in quotes\", "in quotes""
一大堆?\"W号让h看v来很倒胃口。如果你与我有同感,那么Q我们在Lua中,可以用另一U表C方法:?[["?]]"多行的字符串括h。(lua5.1: 中括号中间可以加入若q个"="P?[==[ ... ]==]Q详见下面示?/span>Q?br> CZQ下面的语句所表示的是完全相同的字W串Q?br>
a = 'alo\n123"'
a = "alo\n123\""
a = '\97lo\10\04923"'
a = [[alo
123"]]
a = [==[
alo
123"]==]
值得注意的是Q在q种字符串中Q如果含有单独用的"[["?]]"׃然得?\["?\]"来避免歧义。当Ӟq种情况是极会发生的?br>
E. Table
关系表类型,q是一个很强大的类型。我们可以把q个cd看作是一个数l。只是C语言的数l,只能用正整数来作索引Q在Lua中,你可以用Lcd来作数组的烦引,除了nil。同P在C语言中,数组的内容只允许一U类型;在Lua中,你也可以用Q意类型的值来作数l的内容Q除了nil?br> Table的定义很单,它的主要特征是用"{"?}"来括起一pd数据元素的。比如:
T1 = {} -- 定义一个空?/span>
T1[1]=10 -- 然后我们可以象C语言一h使用它了?/span>
T1["John"]={Age=27, Gender="Male"}
q一句相当于Q?br>
T1["John"]={} -- 必须先定义成一个表Q还记得未定义的变量是nilcd?/span>
T1["John"]["Age"]=27
T1["John"]["Gender"]="Male"
当表的烦引是字符串的时候,我们可以写成Q?br>
T1.John={}
T1.John.Age=27
T1.John.Gender="Male"
?br>
T1.John{Age=27, Gender="Male"}
在定义表的时候,我们可以把所有的数据内容一起写?{"?}"之间Q这样子是非常方便,而且很好看。比如,前面的T1的定义,我们可以q么写:
T1=
{
10, -- 相当?nbsp;[1] = 10
[100] = 40,
John= -- 如果你原意,你还可以写成Q["John"] =
{
Age=27, -- 如果你原意,你还可以写成Q["Age"] =27
Gender=Male -- 如果你原意,你还可以写成Q["Gender"] =Male
},
20 -- 相当?nbsp;[2] = 20
}
看v来很漂亮Q不是吗Q我们在写的时候,需要注意三点:
W一Q所有元素之_L用逗号"Q?隔开Q?br> W二Q所有烦引值都需要用"["?]"括v来;如果是字W串Q还可以L引号和中括号Q?br> W三Q如果不写烦引,则烦引就会被认ؓ是数字,q按序自动?往后编Q?br>
表类型的构造是如此的方便,以致于常常被人用来代曉K|文件。是的,不用怀疑,它比ini文g要漂亮,q且强大的多?br>
F. Function
函数Q在Lua中,函数的定义也很简单。典型的定义如下Q?br>
function add(a,b) -- add 是函数名字,a和b是参数名?/span>
return a+b -- return 用来q回函数的运行结?/span>
end
h意,return语言一定要写在end之前。假如我们非要在中间放上一句returnQ那么就应该要写成:do return end?br> q记得前面说q,函数也是变量cd吗?上面的函数定义,其实相当于:
add = function (a,b) return a+b end
和C语言一PLua的函数可以接受可变参C敎ͼ它同h?..."来定义的Q比如:
function sum (a,b,
)
则,在函CQa = 1, b = 2, arg = {3, 4} (lua5.1: a = 1, b = 2, ... = {3, 4})
更可늚是,它可以同时返回多个结果,比如Q?br>
function s()
return 1,2,3,4
end
a,b,c,d = s() -- 此时Qa = 1, b = 2, c = 3, d = 4
前面说过Q表cd可以拥有Lcd的|包括函数Q因此,有一个很强大的特性是Q拥有函数的表,哦,我想更恰当的应该说是对象吧。Lua可以使用面向对象~程了。不信?举例如下Q?br>
t =
{
Age = 27
add = function(self, n) self.Age = self.Age+n end
}
print(t.Age) -- 27
t.add(t, 10)
print(t.Age) -- 37
不过Qt.add(t,10) q一句实在是有点土对吧?没关p,在Lua中,我们可以写成Q?br>
t:add(10) -- 相当?nbsp;t.add(t,10)
G. Userdata ?Thread
q两个类型的话题Q超Z本文的内容,׃打算l说了?br>
VI. l束?br> p么结束了吗?当然不是Q接下来Q我们需要用Lua解释器,来帮助理解和实践了。相信这样会更快的对Lua上手了?br> pC语言一PLua提供了相当多的标准函数来增强语言的功能。用这些标准函敎ͼ可以很方便的操作各种数据cdQƈ处理输入输出。有兌斚w的信息,我们可以参考《Programming in Lua 》一书,也可以在|络上直接观看电(sh)子版Q网址为:http://www.lua.org/pil/index.html
备注Q本文的部䆾内容摘、译自lua随机文档?br>相关链接Q?br>1. Lua 官方|站Q?http://www.lua.org
2. Lua Wiki|站Q你可以在这里找到很多相关的资料Q如文档、教E、扩展,以及C/C++的包装等Q?http://lua-users.org/wiki/
3. Lua 打包下蝲Q包括各U^台和~译器的工程文g如vs2003,vs2005Q:http://luabinaries.luaforge.net/download.html
q是我编译好的Lua5.02的解释器Q?a >http://files.cnblogs.com/ly4cn/lua.zip
]]>
版权所?span lang=EN-US>,转蝲h明出?span lang=EN-US>,勿用于商业用?span lang=EN-US>,谢谢!
作?span lang=EN-US>: 大宝天天?span lang=EN-US>
Blog: http://www.shnenglu.com/singohgod
本h水^有限,有错h?span lang=EN-US>,Ƣ迎交流,共同q步!
国内关于Lua的资料实在是太少,ZL一个合适的Lua?/span>C++装,真是如同大v捞针.在看了众多资料后锁定以下几种:LuaBind ToLua++ LuaPlus.在选择上颇有讽刺的味道,LuaBind的版本号q没?/span>1.0,加上|友颇有微词,攑ּ.ToLua++本来有朋友推?/span>,但是怎么都找不到下蝲,官网是打不开,无赖攑ּ.只?/span>LuaPlus?/span>,看到一些h的评仯?/span>,于是军_q它吧.
LuaPlus的资料就更少?/span>,q怎么配置怎么调试{什么都没有,只有沐枫大哥讲解了语法方面的一文?/span>.啊哟,怎么搞呢,N又只有硬着头皮上了?(某伟人曾说过,但凡杰出的事都是着头皮q出来滴)
好了,a归正?/span>,下面讲讲我的l验?/span>:
如何~译
1. 下蝲
首先到官方网站下?/span>: http://www.luaplus.org/
下蝲q个: All source code: http://luaplus.org/LuaPlus51_Build1100.zip (我当前的版本,当然新好)
2. 剥离
解开下蝲?/span>,打开 \LuaPlus51_Build1100\Src\LuaPlus 里面是全部源文g,src下是lua的源文g.q里有个令h疑惑的地?/span>,源文件中带了一些不需要的文g,要剔除去,基本上需要以下这些文?/span>:
1) Lua库文?/span>:
lapi.c lapi.h lauxlib.c lauxlib.h lbaselib.c lcode.c lcode.h ldblib.c ldebug.c ldebug.h ldo.c ldo.h ldump.c lfunc.c lfunc.h lgc.c lgc.h linit.c |
liolib.c llex.c llex.h llimits.h lmathlib.c lmem.c lmem.h loadlib.c lobject.c lobject.h lopcodes.c lopcodes.h loslib.c lparser.c lparser.h lstate.c lstate.h lstring.c |
lstring.h lstrlib.c ltable.c ltable.h ltablib.c ltm.c ltm.h lua.h luaconf.h lualib.h lundump.c lundump.h lvm.c lvm.h lzio.c lzio.h print.c |
2) LuaPlus头文?/span>:
auxiliar.h LuaAutoBlock.h LuaCall.h LuaFunction.h LuaHelper.h LuaHelper_Object.h LuaHelper_StackObject.h LuaLink.h LuaObject.h LuaObject.inl LuaPlus.h LuaPlusCD.h |
LuaPlusFunctions.h LuaPlusInternal.h LuaStackObject.h LuaStackObject.inl LuaStackTableIterator.h LuaState.h LuaState.inl LuaStateOutFile.h LuaTableIterator.h luathread.h pt.h srm.h |
3) LuaPlus源文?/span>
LuaCall.cpp LuaObject.cpp LuaPlus.cpp LuaPlusAddons.c LuaPlusFunctions.cpp LuaPlus_Libs.cpp LuaStackObject.cpp |
LuaStackTableIterator.cpp LuaState.cpp LuaStateOutFile.cpp LuaState_DumpObject.cpp LuaTableIterator.cpp lwstrlib.c |
3. 建立目
然后你就可以?/span>VS中徏立一个新目,静态链接库?/span>:
分别把需要的文g加进?/span>,之后~译,应该能通过?/span>.
如何使用
接着讲讲如何在你的其他项目中使用LuaPlus.
1.必要的配|?/span>
你的目可能是这L:
讄GameClient的依赖项?/span>LuaPlusLib
#include "LuaPlus.h"
using namespace LuaPlus;
记得q这?/span>…
2.创徏一个状?/span>
LuaStateOwner state;
今后的操作都围绕q个state
3.执行脚本
int iret = state->DoFile("test.lua");
q回gؓ0表示成功,否则不成?/span>.
4.C++中获?/span>Lua脚本的变?/span>
假设你的test.lua中有:
health = 200;
通过下列Ҏ(gu)可以在C++中得到这个数?/span>
int mytest = state->GetGlobal("health").GetInteger();
5.C++中调?/span>Lua脚本里的函数
假设你的test.lua中有:
function Add(x, y)
return x+y;
end
?/span>C++中需要先声明q个函数:
LuaFunction<float> Add = state->GetGlobal("Add");
q样你就有了Add()q个函数,然后可以像q_一样用它?/span>:
float myret = Add(
6.Lua脚本中调?/span>C++函数
在读?/span>test.lua之前要先?/span>C++函数注册?/span>Lua的运行时栈里,q样在执?/span>lua脚本的时?/span>,才知道执行哪一个函?/span>:
首先有函?/span>:
int LS_PrintNumber(LuaState* state)
{
LuaStack args(state);
if (args[1].IsNumber()) {
printf("%f\n", args[1].GetNumber());
}
return 0;
}
然后注册q个函数?/span>Lua:
state->GetGlobals().Register("PrintNumber", LS_PrintNumber);
q样把LS_PrintNumber映射?/span>Lua中可以用的函数PrintNumber.
Test.lua脚本中添加调用语?/span>:
PrintNumber(30);
?/span>state->DoFile("test.lua");执行的时?/span>,执行了C++中的q个函数.
ȝ
本文介绍?/span>LuaPlus的基本配|方法和使用,希望对你有帮?/span>.下一将介绍一些高U特?/span>,如怎样?/span>VS中调?/span>LuaPlus的脚?/span>,以及对类的操作等.
如果q有M疑问可以看看下面q个单的例子:
/Files/singohgod/LuaPlus_Test.rar