LUA调用C++函数的一个简单Demo

这个Demo是帮助初学者了解LUA是如何调用C++/C的函数的.LUA调用的C++中类的函数必须是静态函数方可.

一、我的LUA文件很简单就是调用一个已经注册的C++函数如下:

print("Hello, This is a Lua File.")
iResult = getValueFromCFunc(5)//调用注册的C++函数
print("5*4*3*2*1=",iResult)   //打印结果
二、代码很简单.理解起来也应该不是很难,故在此不多言.

extern "C"
{
 #include "lua.h"
 #include "lualib.h"
 #include "lauxlib.h"
};
/***************************************************************/
int Factorial(int n)
{
 if (n == 0)
 {
  return 1;
 } 
 else
 {
  return n*Factorial(n-1);
 }
}
/***************************************************************/
int getValueFromCFunc(lua_State* pL)
{
 int num = (int)lua_tonumber(pL,1); //从栈顶中取一个值  
 lua_pushnumber(pL,Factorial(num)); //调用Factorial函数将返回值入栈  
 return 1;                          //1表示返回值个数
} 
/***************************************************************/
int main()
{
 lua_State* pLuaState;
 pLuaState = luaL_newstate();
 luaL_openlibs(pLuaState);
 lua_register(pLuaState,"getValueFromCFunc", getValueFromCFunc);
 if (luaL_dofile(pLuaState,"Fuc.lua") != 0)
 {
  std::cout<<"Load Lua File Error"<<std::endl;
 }
 lua_close(pLuaState);
 return 0;
}
本人郑重声明如下 一、本文来自CSDN博客,本文地址http://t.cn/z8achwq 二、All Rights Reserved. 任何个人或网站转载本文时不得移除本声明. 三、不得对文章进行修改,除非明确说明.同时欢迎大家评论转载和分享.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在导出一个lua状态机的所有函数时,首先需要明确导出哪些函数。在Lua中可以通过在C语言中调用该状态机的函数来实现与Lua中定义的函数交互,因此我们需要将需要导出的函数在C语言中进行实现。 导出函数时需要注意以下几点: 1. 需要使用luaL_Reg结构定义需要导出的函数属性,其中包含函数名和函数指针; 2. 在实现C语言函数时,需要将其与Lua中的参数和返回值进行对应; 3. 调用luaL_register函数注册需要导出的函数,传入函数表名和函数表属性,同时借助luaL_newlib函数创建新的函数表。 例如,我们需要导出以下三个函数: 1. 输出Hello World:printHello() 2. 计算两个数字的和:add(x, y) 3. 判断一个数是否为正数:isPositive(num) 那么在C语言中,可以这样实现: static int l_printHello(lua_State *L) { printf("Hello World\n"); return 0; } static int l_add(lua_State *L) { double x = luaL_checknumber(L, 1); double y = luaL_checknumber(L, 2); lua_pushnumber(L, x + y); return 1; } static int l_isPositive(lua_State *L) { double num = luaL_checknumber(L, 1); lua_pushboolean(L, num > 0); return 1; } 然后我们需要将其存到一个luaL_Reg结构体数组里,如下: static const struct luaL_Reg myfuncs[] = { {"printHello", l_printHello}, {"add", l_add}, {"isPositive", l_isPositive}, {NULL, NULL} }; 最后,我们可以在Lua中这样使用这些函数: local mylib = require("mylib") mylib.printHello() -- 输出Hello World print(mylib.add(1, 2)) -- 输出3 print(mylib.isPositive(-1)) -- 输出false 因此,以上就是导出一个lua状态机的所有函数的步骤和实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值