delphi 怎么获取lua 函数的返回值

delphi 怎么获取lua 函数的返回值,第1张

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所执行函数的返回值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9774065.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存