[Lua脚本实践2]LuaPlus中关于函数的调用

来源:互联网 发布:寻仙udp的3100端口 编辑:程序博客网 时间:2024/05/29 08:34

   LUA和C++ 之间的函数调用是应用最广的,调用方式也和丰富。


1.全局函数被Lua语句调用

#include <iostream>using namespace std;#include "..\..\LuaPlus\src\LuaPlus\LuaPlus.h"#define LUA_OK 0void show(int a, int b){ cout<<"C函数在Lua内打印"<<a+b<<endl;}int main(){LuaStateOwner state;// 执行Lua脚本:state->DoString("print('欢迎 World\\n')");//注册C语言函数到Lua中state->GetGlobals().RegisterDirect("add", show);state->DoString("add(4,7)");}

    全局函数show在Lua中可以换个名字调用,利用RegisterDirect()函数将show注册到脚本中以add取代之。然后在脚本中执行add函数,得到的结果和执行show是一样的。


2.对.lua脚本文件中的函数调用

     1)在Lua脚本内执行。

对于Lua中的函数的调用方式也很多,就举几个例子吧。还是上免得程序不变,只更改.Lua文件中的内容

function Add(x, y)       return x+y; endprint(Add(3,5));

运行结果,屏幕上会输出8.


   2)在Lua脚本内的函数被C++执行。

    除了可以在Lua内中执行以外,还可以在C++环境中执行。把上面的那个Lua文件最后的那行打印语句删掉,用下面的C++语句调用Add函数。

#include <iostream>using namespace std;#include "..\..\LuaPlus\src\LuaPlus\LuaPlus.h"#define LUA_OK 0int main(){LuaStateOwner state;state->DoFile("test.lua");LuaFunction<float> luaAdd =  state->GetGlobal("Add");float i = luaAdd(1.1f,1.0f);cout<<"Lua 内部函数返回 = "<<i<<endl;return 0;}

     还有一种方法,直接用DoString语句调用。

#include <iostream>using namespace std;#include "..\..\LuaPlus\src\LuaPlus\LuaPlus.h"#define LUA_OK 0int main(){LuaStateOwner state;state->DoFile("test.lua")state->DoString("print(Add(3,4))");return 0;}

结果是一样的。

3)C++函数被Lua脚本内的函数执行。

   这个调用就有点意思了,在Lua脚本里可以这么写

function Add(x, y)       PrintNumber(x,y); end

也就是Add函数调用了一个名字叫PrintNumber()的函数。而这个PrintNumber函数在哪里呢?让我们看看C++代码

#include <iostream>

using namespace std;#include "..\..\LuaPlus\src\LuaPlus\LuaPlus.h"#define LUA_OK 0void  Show(int x,int y) {cout<<"x+y="<<x+y<<endl;}int main(){LuaStateOwner state;state->DoFile("test.lua");state->GetGlobals().RegisterDirect("PrintNumber", Show);state->DoString("Add(3,4)");return 0;}

原来PrintNumber只是一个中间字符串,他指向了C++函数Show();







原创粉丝点击