C++ 与 Lua交互,实现简单的C++ 与 Lua的简单调用,在控制台输出实现颜色的区分输出(一)
今天尝试配置 实现以下c++ 与 lua 的交互实现,准备工作:
lua.h, lauxlib.h, lualib.h , luaconf.h, lua5.1.lib(五个文件要保证是同一版本的lua,如果安装了luaForWindows可以在安装目录找到这些文件,没有安装也可以自行下载lua编译生成)
VS创建项目luawithc++,将上面的除lua5.1.lib文件生育四个文件复制到与 .vcxproj文件相同目录即可
将lua5.1.lib文件添加到 附加依赖项。vs中右击工程文件-->属性-->配置属性-->链接器-->输入-->附加依赖项
创建main.cpp 测试编译一下是否能通过:
#include <iostream> extern "C" { #include "lua.h"//如果出现报错,无法找到文件,考虑文件位置放的不对 #include "lauxlib.h" #include "lualib.h" } int main() { //创建lua状态 相当于lua的栈 lua_State *L = luaL_newstate();//提示无法解析的外部符号 考虑lua5.1.lib没有加到 附加依赖项 if(L==NULL) { std::cout<<"error lua_State by luaL_newstate!"<<std::endl; return 0; } system("pause"); return 0; }
正常情况下 如果文件版本没问题 添加了 附加依赖项是可以正常编译通过的。继续下一步,创建一个要调用的lua文件 luaLogOut.lua
将lua文件放在debug目录下
print ("JJJKKK") function logout(str,...) print(str) end
很简单的一段测试代码,继续更新main.cpp
#include <iostream> extern "C" { #include "lua.h"//如果出现报错,无法找到文件,考虑文件位置放的不对 #include "lauxlib.h" #include "lualib.h" } int main() { //创建lua状态 相当于lua的栈 lua_State *L = luaL_newstate();//提示无法解析的外部符号 考虑lua5.1.lib没有加到 附加依赖项 if(L==NULL) { std::cout<<"error lua_State by luaL_newstate!"<<std::endl; return 0; } luaL_openlibs(L);//如果不加 会导致luaL_dofile出错 //加载脚本 int nRet = luaL_dofile(L,"luaLogOut.lua");//注意上面5个文件的版本一致,否则有可能导致luaL_dofile找不到,另外还有luaL_loadfile可以自行百度看下区别 if(nRet) { std::cout<<"error load file by luaL_dofile!"<<std::endl; lua_close(L); system("pause"); return 0; } lua_getglobal(L,"logout");//获取lua脚本中的全局函数 lua_pushstring(L,"I am lua function 'logout' tese");//要传入的参数 压入栈中 /* lua_pushcclosure(L, func, 0) // 创建并压入一个闭包 lua_createtable(L, 0, 0) // 新建并压入一个表 lua_pushnumber(L, 343) // 压入一个数字 lua_pushstring(L, “mystr”) // 压入一个字符串 */ int nRet = lua_pcall(L,1,1,0);// 1 1 0 传入一个参数 返回一个参数 0自定义错误处理 注意与lua_call的区别 if(nRet) { const char* result = lua_tostring(L,-1); std::cout<<"return msg: "<<result<<std::endl; lua_close(L); system("pause"); return 0; } lua_close(L); system("pause"); return 0; }
配置没有出错的话会顺利的输出:
JJJKKK
I am lua function 'logout' test
至此简单的C++调用Lua的简单实现就完成了。
下一篇继续实现lua调用C++ 控制台输出颜色区分,在项目实际开发中使用效果还不错。
留言评论
暂无留言