铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 2888|回复: 5

[lua复刻] 求大神写一个在C中添加函数,然后在lua可以调用的小教程

[复制链接]
发表于 2013-5-18 15:46 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
另外HAPI_abc传入的 lua_State 是什么意思呢?
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-5-18 23:11 | 显示全部楼层
pascal版的有http://txdx.net/thread-435670-1-4.html,c语言其实函数都是一样的。

lua state可以理解为lua使用的一个栈。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2013-5-19 06:09 | 显示全部楼层
大概是这样。
1.先在sdlfun.c里面写好C的函数比如说叫JY_Myfunction。
2.然后在jymain.h里面添加该函数的原型。例如:int JY_Myfunction();
3.在jymain.c里面找到jylib [],在里面添加{"Myfunction",HAPI_Myfunction},
第一个字符串是lua调用此函数时用的名字,这里lua调用的时候就是lib.Myfunction()。
HAPI_Myfunction就是用来处理从lua传过来的参数和返回lua数值的函数。
4.在luafun.h里面添加int HAPI_Myfunction(lua_State *pL);
5.luafun.c里面写相关处理函数,这里复制一个Delay来说明
  1. int HAPI_Delay(lua_State *pL)
  2. {
  3.     int x=(int)lua_tonumber(pL,1);
  4.     JY_Delay(x);
  5.         return 0;
  6. }
复制代码
楼上所说lua_state是一个栈,lua_tonumber(pL,1);就是提取lua传入的第一个参数,如果有第二个参数那么就是lua_tonumber(pL,2)。这里不一定非要tonumber还可以tostring。有了参数之后(可以没有)就可以调用你刚写好的JY_Myfunction。最后,如果这个函数有返回的话,假设返回值是t,那么用lua_pushnumber(pL,t);。

以上可能有遗漏,并且说明可能不正确,请自行参考源码。

点评

补充一下。C函数返回的值就是返回的值的各数。比如调用lua_pushnumber(pL,t)一次就返回1,lua_pushnumber(pL,t)两次就返回2。  发表于 2013-6-10 02:57
好!  发表于 2013-5-19 07:44
好的!  发表于 2013-5-19 07:43
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-11-21 20:47

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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