Lua与c/c++交互

转载 2015年07月09日 17:54:31

先安装lua,安装完后会有个include目录和lib目录,编译c/c++的时候需要用到。

lua调用c/c++


static int average(lua_State* L)
{
int n = lua_gettop(L);
double sum=0;
int i = 0;
for(i=1;i<=n;i++)
{
if(!lua_isnumber(L,i))
{
lua_pushstring(L,"Incoorect argument to 'average'");
lua_error(L);
}
sum+=lua_tonumber(L,i);
}


lua_pushnumber(L,sum/n);
lua_pushnumber(L,sum);


return 2;




}


int _tmain(int argc, _TCHAR* argv[])
{
int nRet=0;
int nCount=0;
lua_State* L1=lua_open();
luaL_openlibs(L1);
lua_register(L1,"average",average);


nRet=luaL_dofile(L1,"E:/aoi_list/lua_call_c79/Debug/test.lua");
//lua_pcall(L1, 0, LUA_MULTRET, 0);
nCount = lua_gettop(L1);
cout<<"ncount is "<<nCount<<endl;
//lua_getglobal(L1,"avg");
cout<<"avg is:"<<lua_tointeger(L1,1)<<endl;
//lua_pop(L1,1);
//lua_getglobal(L1,"sum");
cout<<"sum is:"<<lua_tointeger(L1,2)<<endl;
lua_close(L1);
return 0;

}

avg,sum=average(10,20,30,40,50)
print("The average is",avg)
print("The sum is",sum)


c调用lua

#include <stdio.h>
#include <lua.hpp>


lua_State * L;
int luadd(int x,int y)
{
int sum=0;
lua_getglobal(L,"add");//压栈
lua_pushnumber(L,x);//实参入栈
lua_pushnumber(L,y);//实参入栈


lua_call(L,2,1);//进行调用,2个参数,x,y然后进行计算
sum=(int)lua_tonumber(L,-1);
lua_pop(L,1);


lua_getglobal(L,"z");
int z=lua_tonumber(L,-1);
lua_pop(L,1);
return sum;
}



int main()
{
int sum=0;
L=lua_open();
luaL_dofile(L,"E:/aoi_list/lua_call_c79/c_call_lua_79/add.lua");
sum=luadd(10,15);


printf("sum is %d",sum);
lua_close(L);
return 0;
}


function add(x,y)
return x+y+2
end


z=6


继续看

相关文章推荐

Lua 与C/C++ 交互系列:Light userdata翻译

利用零碎的时间,先把以后用的知识点提前准备好。最近比较忙,正在准备一篇绑定C++对象到Lua中。但是,不想轻易下手,希望做足准备。 这篇翻译来自于lua-users.org   ,原文地址。 Li...

Lua与C/C++的交互

Lua5.1的常用API     lua_State             Lua状态机或叫Lua虚拟机,支持多线程,可创建多个状态机     typedef int (*lua_Cfunct...

lua 与 C/C++交互

Lua5.1的常用API     lua_State             Lua状态机或叫Lua虚拟机,支持多线程,可创建多个状态机     typedef int (*lua_Cfunct...

Lua与宿主语言(C/C++)交互原理

Lua语言可研究的东西真是多,各种机制原理:与宿主语言(下文均指C/C++)的交互、内存管理(垃圾回收)、虚拟机实现、协程、闭包、异常捕获机制等。如取其一进行研究,要吃透还是需要点时间和精力。相信只要...

Lua 与C/C++ 交互系列:Userdata知识点翻译

1、来自Lua 5.0Reference Manual  -The Applicatioin Program Interface -Userdata Userdata represents C ...

C/C++与Lua之间进行数据函数交互

在使用Cocos2d-x 时候,难免需要C/C++调用Lua函数、数据或Lua调用C/C++函数,那么本篇讲详细介绍C/C++与Lua之间的数据、函数交互。 首先让我们来简单了解几个Lua AP...

Lua 与C/C++ 交互系列:注册枚举enum到Lua Code中

在Lua Code中注册C/C++的枚举非常容易,就像注册全局变量一样。我们使用枚举名称作为命名空间,来避免注册的枚举发生冲突。注册的枚举存储在全局环境(线程环境)中。 当在Lua Code中访问枚举...

Lua 与C/C++ 交互系列:Lua面向对象编程翻译

本文翻译来自:Programming with Multiple Paradigms in Lua 原文如下: Object-Oriented Programming Lua has...

[lua] 使用lua string作为二进制buffer和c/c++交互

1. Lua中string可以包含二进制数据,例如一个二进制文件,通过file:read
  • n5
  • n5
  • 2014年07月17日 16:25
  • 12025

lua(8)-C API 2[C++与lua的交互]

上一篇我们提到许多c的api,这一篇我们就来看看如何实现基本的C++与lua的交互。 (1)基础示例 首先我们打开VS,新建一个c++控制台程序lua1,在我电脑上,这个新建的c++项目路径是F:\V...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lua与c/c++交互
举报原因:
原因补充:

(最多只允许输入30个字)