俺老刘终于可以将指针传递给lua了!
发布日期:2021-06-29 18:53:08
浏览次数:2
分类:技术文章
本文共 4997 字,大约阅读时间需要 16 分钟。
文章目录
俺老孙终于可以将指针传递给lua了!
- 希望把指针传给lua
- 但是lua拿到了它
- 还要通过这个指针去访问他指向的东西
- 那咋办
- 首先,是用lua_pushlightuserdata(L,&a);将指针传给lua
- 老子不想说了哈哈
g++ -I /home/ztz123/Desktop/lua-5.4.0/src -L /home/ztz123/Desktop/lua-5.4.0/src A.cpp -llua -ldl
#includeextern "C" { #include "lua.h"#include "lualib.h"#include "lauxlib.h"}typedef struct haha{ int a;int b;}haha;/* 指向lua解释器的指针 */lua_State* L;static int average(lua_State *L){ haha *a = (haha *)lua_topointer(L,-1); printf("%d\n",a->a); return 0;}int main ( int argc, char *argv[] ){ /* 初始化Lua */ L = luaL_newstate(); /* 载入Lua基本库 */ luaL_openlibs(L); /* 注册自定义函数 */ lua_register(L, "average", average); luaL_loadfile(L,"avg.lua"); haha a={ 23,89};lua_pcall(L,0,0,0); //居然特么的还必须要有这句话!! lua_getglobal(L, "func1"); lua_pushlightuserdata(L,&a); lua_pcall(L, 1, 0, 0); /* 执行avg.lua文件 */ luaL_dofile(L, "avg.lua"); /* 关闭Lua */ lua_close(L); /* 暂停 */ printf( "Press enter to exit..." ); getchar(); return 0;}
- avg.lua长这样子
function func1(a)print("esfs")average(a)end
如果有两个参数怎么bane?
- 你必须记住最右边的参数是-1
- 往左依次是-2,-3
还有就是我发现lua_topointer(L,-2); int aa = lua_tonumber居然不自动弹出栈啊!!!很神奇吧。难道是函数结束它自动弹掉吗?
#includeextern "C" { #include "lua.h"#include "lualib.h"#include "lauxlib.h"}typedef struct haha{ int a;int b;}haha;/* 指向lua解释器的指针 */lua_State* L;static int average(lua_State *L){ haha *a = (haha *)lua_topointer(L,-2); int aa = lua_tonumber(L,-1); printf("%d\n",a->a); printf("%d\n",aa); return 0;}int main ( int argc, char *argv[] ){ /* 初始化Lua */ L = luaL_newstate(); /* 载入Lua基本库 */ luaL_openlibs(L); /* 注册自定义函数 */ lua_register(L, "average", average); luaL_loadfile(L,"avg.lua"); haha a={ 23,89};lua_pcall(L,0,0,0); lua_getglobal(L, "func1"); lua_pushlightuserdata(L,&a); lua_pcall(L, 1, 0, 0); /* 执行avg.lua文件 */ luaL_dofile(L, "avg.lua"); /* 关闭Lua */ lua_close(L); /* 暂停 */ printf( "Press enter to exit..." ); getchar(); return 0;}
function func1(a)print("esfs")average(a,12)end
自己传参给lua的时候要记得从左到右传参啊
#includeextern "C" { #include "lua.h"#include "lualib.h"#include "lauxlib.h"}typedef struct haha{ int a;int b;}haha;/* 指向lua解释器的指针 */lua_State* L;static int average(lua_State *L){ haha *a = (haha *)lua_topointer(L,-2); int aa = lua_tonumber(L,-1); printf("%d\n",a->a); printf("%d\n",aa); return 0;}int main ( int argc, char *argv[] ){ /* 初始化Lua */ L = luaL_newstate(); /* 载入Lua基本库 */ luaL_openlibs(L); /* 注册自定义函数 */ lua_register(L, "average", average); luaL_loadfile(L,"avg.lua"); haha a={ 23,89};lua_pcall(L,0,0,0); lua_getglobal(L, "func1"); lua_pushlightuserdata(L,&a); lua_pushnumber(L,88); lua_pcall(L, 2, 0, 0); /* 执行avg.lua文件 */ luaL_dofile(L, "avg.lua"); /* 关闭Lua */ lua_close(L); /* 暂停 */ printf( "Press enter to exit..." ); getchar(); return 0;}
function func1(a,b)print("esfs")average(a,b)end
double数也用pushnumber传递啊
#includeextern "C" { #include "lua.h"#include "lualib.h"#include "lauxlib.h"}typedef struct haha{ int a;int b;}haha;/* 指向lua解释器的指针 */lua_State* L;static int average(lua_State *L){ haha *a = (haha *)lua_topointer(L,-2); double aa = lua_tonumber(L,-1); printf("%d\n",a->a); printf("%9f\n",aa); return 0;}int main ( int argc, char *argv[] ){ /* 初始化Lua */ L = luaL_newstate(); /* 载入Lua基本库 */ luaL_openlibs(L); /* 注册自定义函数 */ lua_register(L, "average", average); luaL_loadfile(L,"avg.lua"); haha a={ 23,89};lua_pcall(L,0,0,0); lua_getglobal(L, "func1"); lua_pushlightuserdata(L,&a); lua_pushnumber(L,34.567999); lua_pcall(L, 2, 0, 0); /* 执行avg.lua文件 */ luaL_dofile(L, "avg.lua"); /* 关闭Lua */ lua_close(L); /* 暂停 */ printf( "Press enter to exit..." ); getchar(); return 0;}
function func1(a,b)print("esfs")average(a,b)print(type(78)) end
如何获取返回值
#includeextern "C" { #include "lua.h"#include "lualib.h"#include "lauxlib.h"}typedef struct haha{ int a;int b;}haha;/* 指向lua解释器的指针 */lua_State* L;static int average(lua_State *L){ haha *a = (haha *)lua_topointer(L,-2); double aa = lua_tonumber(L,-1); //printf("%d\n",a->a); printf("%9f\n",aa); return 0;}int main ( int argc, char *argv[] ){ /* 初始化Lua */ L = luaL_newstate(); /* 载入Lua基本库 */ luaL_openlibs(L); /* 注册自定义函数 */ lua_register(L, "average", average); luaL_loadfile(L,"avg.lua"); haha a={ 23,89};lua_pcall(L,0,0,0); lua_getglobal(L, "func1"); lua_pushlightuserdata(L,&a); lua_pushnumber(L,34.567999); lua_pcall(L, 2, 2,0); double result = lua_tonumber(L,-2); printf("jieguoshi: %5f\n",result); /* 执行avg.lua文件 */ luaL_dofile(L, "avg.lua"); /* 关闭Lua */ lua_close(L); /* 暂停 */ printf( "Press enter to exit..." ); getchar(); return 0;}
function func1(a,b)print("esfs")average(a,b)print(type(78)) return b,bend
转载地址:https://cyj666.blog.csdn.net/article/details/108279087 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月13日 07时05分32秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
SSD:虽然我适应多尺度,可是数据扩增对我可太重要了/(ㄒoㄒ)/~~
2019-04-30
关于 tflite 更新的 task_api 和 interpreter 两种方式
2019-04-30
2021-06-21 VC++ 6.0安装
2019-04-30
Java方法重载
2019-04-30
可变参数列表与数组作为参数的区别
2019-04-30
关于javadoc命令
2019-04-30
Java内存管理之堆和栈
2019-04-30
就近原则总结
2019-04-30
this关键字的应用
2019-04-30
构造方法常见问题总结
2019-04-30
package和import应用的常见问题
2019-04-30
static关键字的应用
2019-04-30
关于Objecg的常见问题
2019-04-30
关于单例模式的常见问题
2019-04-30
IDEA创建直接创建spring项目失败:下载失败 ‘https://repo1.maven.org/maven2/org/springframework/spring-aop/5.2.
2019-04-30
iOS推送证书过期处理,极光推送
2019-04-30