游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3809|回复: 3

请教Delphi执行Lua函数的问题,谢谢

[复制链接]

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2006-6-30 22:08:00 | 显示全部楼层 |阅读模式
lua_dofile(l, 'TestABC.Lua');
lua_dostring(l, 'Add(10, 10)');

在TestABC.Lua里面有Add函数的定义
定义如下:
function Add(x, y)
  return x + y
end

我要问的问题是,执行完“lua_dostring(l, 'Add(10, 10)');”这个函数,如何取得Add(10, 10)返回的值。谢谢

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2006-7-1 11:40:00 | 显示全部楼层

Re:请教Delphi执行Lua函数的问题,谢谢

已想到办法解决,以下为解决办法,以提参考

TestABC.Lua的内容如下
TempValue = nil

function Add(x, y)
return x + y
end

function GetValue
return TempValue
end

delphi的代码就改为如下,就可以获得Add的返回值了
procedure TForm1.Button1Click(Sender: TObject);
var
l: p_lua_state;
Temp : String;
begin
l := lua_open();
lua_baselibopen(l);
lua_dofile(l, 'Test.Lua');
lua_dostring(l, 'TempValue = add(10, 10)');
lua_getglobal(L, 'GetValue');
lua_call(L, 0, 1);
Temp := string(lua_tostring(l, -1));
lua_close(l);
ShowMessage(Temp);
end;

16

主题

160

帖子

176

积分

注册会员

Rank: 2

积分
176
QQ
发表于 2006-7-4 16:55:00 | 显示全部楼层

Re:请教Delphi执行Lua函数的问题,谢谢

Test.Lua
function add(a, b)
  return a + b
end

Test.DPR
{$APPTYPE CONSOLE}
uses
  Lua;

var
  l: p_lua_State;
  sum: Integer;
begin
  l := lua_open();
  lua_dofile(l, 'Test.Lua'); // 执行 TEST.LUA
  lua_getglobal('add');     // 获取全局函数 add
  lua_pushnumber(100); // 参数一
  lua_pushnumber(200); // 参数二
  lua_pcall(l, 2, 1, 0);     // 调用脚本函数ADD,两个输入、一个输出
  sum := round(lua_tonumber(l, -1)); // 得到返回值
end.

0

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2006-7-18 10:28:00 | 显示全部楼层

Re:请教Delphi执行Lua函数的问题,谢谢

呵呵,楼主自问自答,可以说答的很精彩,其实Pascal里有着许多C的特性,在编程的时候多可以多用用C的一些习惯,某些时候会有事半功倍的效果。
楼上的方法虽也可以得到返回值,但是代码执行效率就不如楼主的了,呵呵。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 23:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表