Lua 与 delphi 的互动,通常是在 delphi 中加载 Lua 的库,比如 Lua for delphi 等。
假设用 Lua 编写了一个函数(保存在 lua_GetColorlua 文件中):
function nogi_GetColor(nR,nG,nB)if nR <= 25 and nG <= 25 and nB <= 25 then -- 取出25以下黑色
return 1;
end;
return 0;
end
那么调用上面 Lua 函数的代码:
uses LUA, LUALIB; //引入LUA库function lua_CheckColor(r,g,b:Integer):Boolean;
var
Lua : TLua;
begin
Lua := TLuaCreate;
luaopen_debug(LuaInstance); //如果要使用debug库
luaopen_math(LuaInstance);// 如果要使用math库 不然就会attempt to index global 'math' (a nil value)
luaopen_os(LuaInstance);
luaopen_string(LuaInstance);
luaopen_table(LuaInstance);
LuaDoFile('lua_GetColorlua');
lua_getglobal(LuaLuaInstance,'nogi_GetColor');
lua_pushnumber(LuaLuaInstance, r); //将脚本中add函数使用的参数压栈
lua_pushnumber(LuaLuaInstance, g); //将脚本中add函数使用的参数压栈
lua_pushnumber(LuaLuaInstance, b); //将脚本中add函数使用的参数压栈
lua_pcall(LuaLuaInstance, 3, 1,0) ;
Result := (lua_toInteger(LuaLuaInstance,-1) = 1);
LuaFree;
end;
当 Lua 调用 C 函数的时候,使用和 C 调用 Lua 相同类型的栈来交互。C 函数从栈中获取她的参数,调用结束后将返回结果放到栈中。为了区分返回结果和栈中的其他的值,每个 C 函数还会返回结果的个数(the function returns (in C) the number of results it is leaving on the stack)。
// luacallcppcpp : 定义控制台应用程序的入口点。
//
#include "stdafxh"
#include <stdioh>
//lua头文件
#ifdef __cplusplus
extern "C" {
#include "luah"
#include <lauxlibh>
#include <lualibh>
}
#else
#include <luah>
#include <lualibh>
#include <lauxlibh>
#endif
int static add(lua_State L)
{
//获取第一个参数
double x=lua_tonumber(L,1);
double y=lua_tonumber(L,2);
//返回值压栈,压入两个返回值
lua_pushnumber(L,x+y);
lua_pushnumber(L,1000);
//返回值的个数,
return 2;
}
int _tmain(int argc, _TCHAR argv[])
{
lua_State L=NULL;
/ 初始化 Lua /
L = lua_open();
/ 载入Lua基本库 /
luaL_openlibs(L);
/ 运行脚本 /
luaL_dofile(L, "/script/funclua");
//函数入栈
lua_pushcfunction(L,add);
//设置全局函数名
lua_setglobal(L,"Add");
//调用lua函数LUACALLCPP来反调cpp中的add
lua_getglobal(L,"LUACALLCPP");
lua_pushnumber(L,10);
lua_pushnumber(L,3433);
//两个参数,两个返回值
lua_pcall(L,2,2,0);
//取返回值二
printf("lua call cpp return val is %f \n",lua_tonumber(L,-1));
//取返回值一
printf("lua call cpp return val is %f \n",lua_tonumber(L,-2));
/ 清除Lua /
lua_close(L);
return 0;
}
---------------------------------------
--region lua
--Date
--此文件由[BabeLua]插件自动生成
print("funclua hava been loaded")
function LUACALLCPP(x,y)
-- 调用c++中的函数
return Add(x,y)
--print(Add(x,y))
end
--endregion
运行结果:
Function b(str) As String
b = Mid(str, 1, 6)
End Function
sub a()
Dim str As Sting
str="123456789"
str=b()'return str="123456"
end sub
text就是一般的文本字符串,服务器返回什么,你回调函数得到的就是什么。
比方说,服务器上返回字符串"abcd",你得到的就是"abcd";服务器返回"<root><node>demo</node></root>",你得到的就是"<root><node>demo</node></root>";服务器返回的是JSON格式的字符串,那你得到的就是JSON格式字符串
以上就是关于delphi 怎么获取lua 函数的返回值全部的内容,包括:delphi 怎么获取lua 函数的返回值、LUA怎么获取指定的函数返回值、VBA中,怎么去获取Application.Run所执行函数的返回值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)