加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua调用C函数

发布时间:2020-12-14 22:25:13 所属栏目:大数据 来源:网络整理
导读:根据《programming in lua》第26章的内容,我做出来的如下: ? ? 1. 首先,我的Lua目录为: D:/lua5.1/ 环境为 windows ; VC++express edition 2008 ; Lua5.1.4 ; Notepad++ ? 当然,你需要在VC++2008中配置好lua: ? ? ? 这里先不多做解释,假设你已经配置
根据《programming in lua》第26章的内容,我做出来的如下:
?
?
1.
首先,我的Lua目录为: D:/lua5.1/
环境为 windows ; VC++express edition 2008 ; Lua5.1.4 ; Notepad++
?
当然,你需要在VC++2008中配置好lua:
?
?
?
这里先不多做解释,假设你已经配置好了。
?
2.
?
找到 D:/lua5.1/src
?
?
?
目录下的 lua.c 文件,
?
?
?
将这段代码放到 lua.c 文件中,这就是我们自己定义的C函数:
?
?
?
static int linjunjie (lua_State *L) {
?printf("hello junjie /n");
? return 1;? /* number of results */
}
?
这里,我们只是简单打印一行文字,没有参数,没有返回值。
?
然后,我们还需要在 lua.c 中的 main 函数中添加我们的自定义函数(也可以称之为“注册”),添加完之后,类似下面这样(红色部分为我们添加部分):
?
?
?
int main (int argc,char **argv) {
? int status;
? struct Smain s;
? lua_State *L = lua_open();? /* create state */?
?
?lua_pushcfunction(L,linjunjie);
?lua_setglobal(L,"linjunjie");

?
? if (L == NULL) {
??? l_message(argv[0],"cannot create state: not enough memory");
??? return EXIT_FAILURE;
? }
? s.argc = argc;
? s.argv = argv;
? status = lua_cpcall(L,&pmain,&s);
? report(L,status);
? lua_close(L);
? return (status || s.status) ? EXIT_FAILURE : EXIT_SUCCESS;
}
?
3.
现在代码修改完毕,我们需要重新编译我们的 lua ,方法为
进入VS2008的命令提示,然后执行如下操作:
(到lua5.1目录下,执行etc目录下的luavs.bat批处理,他将替我们编译lua)
D:/lua5.1>d:/lua5.1/etc/luavs.bat
?
?
?
4.
假设第3部没有错误,顺利编译完成之后,这时我们的自定义函数就已经被注册到我们机器中的lua中了,试一下。
?
在VC++2008中,将lua添加为外部工具。
?
?
?
然后新建一个 win32控制台应用程序工程,之后,建立一个文本文件,将
?
linjunjie()
?
拷贝进去,然后更改文件名为 linjunjie.lua(这里只要是lua后缀即可),如下所示:
?
?
?
然后选择VC++2008中的 工具->lua,这时IDE底部的 输出窗口会打印出如下所示:
?
?
?
这代表我们成功将自定义C函数加入到了我们的lua中

(图片贴不上,只能打包放在附件里了)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读