Lua与C++的交互
2017-06-02 00:49
260 查看
在VS2010环境下实现Lua与C++的交互
一:搭建环境
工程下载地址:https://github.com/lining91/Lua53
1:下载lua源代码:http://download.csdn.net/detail/lining0420/9858025
2:将代码解压。
3:创建一个win32工程Lua53(如下图所示)
选择静态库,不选择预编译头文件(如下图)
4:将解压的Lua源代码中的src目录下的代码加到Lua53中
编译生成Lua53.lib静态库
二:C++调Lua
工程下载地址:https://github.com/lining91/C2Lua
* main.lua文件*
main.cpp文件
运行结果如下:
三:Lua调C++
Lua中以函数指针的形式调用函数。
工程下载地址:https://github.com/lining91/Lua2C
创建一个空白的工程Lua2C
加载之前生成的Lua53.lib
Lua2C.lua文件
main.cpp文件
运行结果如下
一:搭建环境
工程下载地址:https://github.com/lining91/Lua53
1:下载lua源代码:http://download.csdn.net/detail/lining0420/9858025
2:将代码解压。
3:创建一个win32工程Lua53(如下图所示)
选择静态库,不选择预编译头文件(如下图)
4:将解压的Lua源代码中的src目录下的代码加到Lua53中
编译生成Lua53.lib静态库
二:C++调Lua
工程下载地址:https://github.com/lining91/C2Lua
创建一个空白工程C2Lua 加载之前生成的Lua53.lib
* main.lua文件*
print("into C2Lua file") teststr = "a test lua string" tabletest = {id = 888, num = 666, test = "main.lua"} function C2Lua_Add( x, y ) return x + y end
main.cpp文件
#include <iostream> #include <string.h> using namespace std; // 加载Lua53.lib #pragma comment(lib, "..\\lib\\Lua53.lib") extern "C" { #include "Lua/lua.h" #include "Lua/lauxlib.h" #include "Lua/lualib.h" }; lua_State* L; int C2Lua_Add( int nX, int nY ) { int nSum; lua_getglobal( L, "C2Lua_Add" ); lua_pushnumber( L, nX ); lua_pushnumber( L, nY ); int nresult = lua_pcall( L, 2, 1, 0 ); if ( nresult ) { const char *pErrorMsg = lua_tostring(L, -1); cout << pErrorMsg << endl; lua_close(L); return -1; } nSum = (int)lua_tonumber( L, -1 ); lua_pop( L, 1 ); return nSum; } void main( ) { int nSum = 0; L = luaL_newstate( ); luaopen_base( L ); luaL_openlibs( L ); // 加载lua文件 int nRet = luaL_loadfile(L, "..\\code\\C2Lua.lua"); if ( nRet ) { cout << " load file error " << endl; return ; } // 运行lua文件 nRet = lua_pcall( L, 0, 0, 0); if ( nRet ) { cout << "pcall error." << endl; return; } // 调用函数 int nX = 5; int nY = 8; nSum = C2Lua_Add( nX, nY ); cout << nX << " + " << nY << " = " << nSum << endl; // 读取变量 lua_getglobal( L, "teststr"); string str = lua_tostring( L, -1 ); cout << "teststr is : " << str.c_str() << endl; lua_pop( L, 1 ); //// 读取table lua_getglobal( L, "tabletest" ); lua_getfield( L, -1, "id" ); str = lua_tostring( L, -1 ); cout << "tabletest id is : " << str.c_str() << endl; lua_pop( L, 1 ); lua_getfield( L, -1, "num" ); str = lua_tostring( L, -1 ); cout << "tabletest num is : " << str.c_str() << endl; system("pause"); return; }
运行结果如下:
三:Lua调C++
Lua中以函数指针的形式调用函数。
工程下载地址:https://github.com/lining91/Lua2C
创建一个空白的工程Lua2C
加载之前生成的Lua53.lib
Lua2C.lua文件
local value1 = 10 local value2 = 30 sum = Lua2C_Add( value1, value2 ) print("Lua2C file :" .. value1 .. " + " .. value2 .. " = " .. sum)
main.cpp文件
#include <iostream> #include <string.h 4000 > using namespace std; // 加载Lua53.lib #pragma comment(lib, "..\\lib\\Lua53.lib") extern "C" { #include "Lua/lua.h" #include "Lua/lauxlib.h" #include "Lua/lualib.h" }; lua_State* L; static int Lua2C_Add( lua_State* L ) { // 返回栈中元素的个数 int nCount = lua_gettop( L ); int nNum = 0; for ( int nIdx = 1; nIdx <= nCount; nIdx++ ) { if ( !lua_isnumber( L, nIdx ) ) { lua_pushstring( L, " Error" ); lua_error( L ); } nNum += (int)lua_tonumber( L, nIdx ); } lua_pushnumber( L, nNum ); return 1; } void main( ) { int nSum = 0; L = luaL_newstate( ); luaopen_base( L ); luaL_openlibs( L ); // 注册接口 lua_register( L, "Lua2C_Add", Lua2C_Add); // 加载lua文件 int nRet = luaL_loadfile(L, "..\\code\\Lua2C.lua"); if ( nRet ) { cout << " load file error " << endl; return ; } // 运行lua文件 nRet = lua_pcall( L, 0, 0, 0); if ( nRet ) { cout << "pcall error." << endl; return; } lua_getglobal( L, "sum" ); cout << " sum = " << lua_tonumber( L, -1) << endl; lua_pop( L, 1); lua_close( L ); system("pause"); return; }
运行结果如下
相关文章推荐
- Lua与C++交互调用(1)
- lua与C++交互
- Lua与C/C++的交互4:往Lua中写入C/C++变量
- 【COCOS2DX-LUA 脚本开发之十一】C/C++与Lua之间进行数据函数交互 推荐
- (转)Lua与C/C++交互——Lua调用C/C++
- c++ 与 lua 简单交互1 (LUA CAPI)
- lua与c++交互全解析(二)
- Lua与C/C++的交互2:C/C++中读取Lua文件
- Lua与C/C++的交互1:C/C++与Lua最简单的互动
- lua与c++交互全解析
- lua与c++交互篇:char* 中的陷阱,万恶的'/0'结尾
- LUA与C++交互第一篇
- C/C++与Lua交互(C实现的Lua编译器的例子)
- Lua与C/C++的交互3:C/C++中读取Lua文件中的表
- LuaOO (Lua与C++交互的面向对象封装)
- c++与lua的交互--表的处理
- 简单的C++与LUA交互
- 解决lua与C++交互问题一则,记一笔
- Lua与C/C++的交互6:Lua调用C/C++函数
- lua与c++交互全解析