美文网首页LuaLua教程Lua
三、Lua调用C++函数

三、Lua调用C++函数

作者: 炉石不传说 | 来源:发表于2019-12-11 21:37 被阅读0次

上一篇文章中我们已经知道了,C++怎么调用Lua中的函数,接下来我们学习一下,Lua怎么调用C++中的函数。

这篇文章主要讲在Lua中执行average()函数,怎么调用到C++中的Average函数。然后把Average函数的执行结果再返回给Lua中。

一、直接上代码:

1、在Test.lua文件内添加如下代码:

print "Hello, Lua! Demo3"

avg, sum = average(10,20,30,40,50);

print("The average is ", avg)

print("The sum is ", sum)

2、在LuaTest.cpp文件内添加如下代码:

#include <stdio.h>

extern "C" {

#include "lua.h"

#include "lualib.h"

#include "lauxlib.h"

}

lua_State* L;

static int Average(lua_State *L)

{

//code3

int n = lua_gettop(L);

double sum = 0;

//code4

for (int i = 1; i <= n; ++i)

{

sum += lua_tonumber(L, i);

}

//code5

lua_pushnumber(L, sum / n);

lua_pushnumber(L, sum);

//code6

return 2;

}

int main(int argc, char *argv[])

{

L = lua_open();

luaL_openlibs(L);

//code1

lua_register(L, "average", Average);

//code2

luaL_dofile(L, "Test.lua");

lua_close(L);

printf("Press enter to exit...");

getchar();

return 0;

}

二、代码分析,和上一篇C++调用Lua中重复的函数,这里就不做分析了,不明白的,可以去看上一篇。

code1、lua_register注册函数把Lua函数和C++函数进行绑定。我们F12看一下lua_register里面怎么定义的。lua_register其实是一个宏定义

包括lua_pushcfunction和lua_setglobal操作。其实就是先用lua_pushcfunction把在c++中定义的函数压如栈中,然后lua_setglobal来设置栈顶的元素对应的值,这样就可以把lua函数和栈顶的c++函数建立引用关系。

lua_setglobal其实也是一个宏定义,就是一个特殊的lua_setfield操作。

code2、加载并执行lua脚本,此时lua中的函数average被执行,同时向栈中压如5个参数。参考栈的运行图Log index 1

code3、 lua_gettop是取出栈顶的索引值。此时栈顶的索引值大小就是站内元素的个数。

code4、使用循环变量站内所有的元素,通过lua_tonumber取出站内的值,然后进行相加操作。

code5、把要返回的值再压如栈。此时此时栈内7条数据,参考栈的运行图Log index 2

code6、告诉lua主程序,返回2个值。lua这是可以用参数接受这两个值

三、运行结果如下图

四、程序运行时栈内的变化情况如下图:

如果你感觉这篇文章对你有用,请随手点赞或评论,你的点赞操作可以让更多想学习的人更容易找到这篇文章,谢谢!

相关文章

  • 三、Lua调用C++函数

    上一篇文章中我们已经知道了,C++怎么调用Lua中的函数,接下来我们学习一下,Lua怎么调用C++中的函数。 这篇...

  • Lua绑定流程

    绑定是为了实现将C++代码注册到lua环境,使得lua可以调用C++函数。https://blog.csdn.ne...

  • lua调用c++中的函数(使用LuaBridge)

    前面一节简述描写了如何在c++中调用lua函数,这节简述描写如何在lua中调用c++中的函数,还是使用前一节的工程...

  • C++调用lua方式

    目标 使用C++调用lua接口 示例 lua代码(test.lua) C++调用示例(lua_test.cpp) ...

  • Lua_API lua_call & lua_callk

    开篇 今天来简单了解一下 Lua 的函数调用:lua_call。 解析 函数调用协议 void lua_call ...

  • tolua调用c#函数及变量

    比如说你要调用一个lua函数 但你想把自身传给lua函数让这个函数调用c# 类的其他函数以及变量 首先是调用lua...

  • 四、C++获得Lua的变量和Table的值

    上两篇文章都已经把Lua和C++函数的调用讲完了,这篇开始讲变量和Table的调用。 这篇文章主要是讲C++怎么调...

  • Lua笔记--function

    Lua笔记--Function 函数定义 函数调用 省略括号 Lua函数调用其中有一个比较特别的地方:当函数只有一...

  • c++如何调用lua函数

    对于函数void registerConnectedCallback(int handler);传入的是一个lua...

  • 二、C++调用Lua函数

    上一篇文章中我们已经把测试环境搭建完毕了,接下来就用上次的项目工程进行代码测试和分析。 这篇文章主要讲在C++中怎...

网友评论

    本文标题:三、Lua调用C++函数

    本文链接:https://www.haomeiwen.com/subject/aaiagctx.html