lua 调用 c++的最简单例子+lua咋调用C
发布日期:2021-06-29 18:53:02 浏览次数:2 分类:技术文章

本文共 2004 字,大约阅读时间需要 6 分钟。

文章目录

lua 调用 c++的最简单例子

  • 原来啊,要 luaL_openlibs(L);这个哦!!

  • A.cpp

#include 
extern "C" {
#include "lua.h"#include "lualib.h"#include "lauxlib.h"}/* 指向lua解释器的指针 */lua_State* L;static int average(lua_State *L){
/* 得到参数的个数 */ int n = lua_gettop(L); double sum = 0; int i; /* 循环遍历参数 */ for (i = 1; i <= n; i++) {
/* 所有参数求和 */ sum += lua_tonumber(L, i); } /* 压入平均值 */ lua_pushnumber(L, sum / n); /* 压入和 */ lua_pushnumber(L, sum); /* 返回返回值的个数 */ return 2;}int main ( int argc, char *argv[] ){
/* 初始化Lua */ L = luaL_newstate(); /* 载入Lua基本库 */ luaL_openlibs(L); /* 注册自定义函数 */ lua_register(L, "average", average); /* 执行avg.lua文件 */ luaL_dofile(L, "avg.lua"); /* 关闭Lua */ lua_close(L); /* 暂停 */ printf( "Press enter to exit..." ); getchar(); return 0;}
  • avg.lua写东西
print(average(12,23))
  • 然后g++ -I /home/ztz123/Desktop/lua-5.4.0/src -L /home/ztz123/Desktop/lua-5.4.0/src A.cpp -llua -ldl
  • 然后就好啦。
  • 特码的,可是我这个lua脚本还是需要现在C++里面干点活(如注册),然后让这个脚本跑就好了。

canci

lua咋调用C

  • 前面讲C与Lua交互的原理,讲到了Lua调用C的接口时,
  • 需要C将函数通过注册机制注册到当前lua_State全局变量,
  • 实例具体介绍怎么注册并调用到C的函数接口。

1 实现实际操作的C函数

static int add(int a, int b){
return a+b;}static int sub(int a, int b){
return a - b;}static int mul(int a, int b){
return a * b;}

2 实现Lua与C的数据转换函数

static int lua_add_api(lua_State *L){
//至少要有两个参数 if ((!lua_isinteger(L, 1)) || (!lua_isinteger(L, 2))) return 0; int a = lua_tointeger(L, 1); int b = lua_tointeger(L, 2); int ret = add(a, b); lua_pushnumber(L, ret); return 1;}static int lua_sub_api(lua_State *L){
if ((!lua_isinteger(L, 1)) || (!lua_isinteger(L, 2))) return 0; int a = lua_tointeger(L, 1); int b = lua_tointeger(L, 2); int ret = sub(a, b); lua_pushnumber(L, ret); return 1;}static int lua_mul_api(lua_State *L){
//至少要有两个参数 if ((!lua_isinteger(L, 1)) || (!lua_isinteger(L, 2))) return 0; int a = lua_tointeger(L, 1); int b = lua_tointeger(L, 2); int ret = mul(a, b); lua_pushnumber(L, ret); return 1;}

canci

转载地址:https://cyj666.blog.csdn.net/article/details/108253888 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:static类成员成员函数+去掉my_class不行啊!
下一篇:Lua和C++交互详细总结

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月25日 17时48分42秒