一直在用Lua写程序。但是对lua和c/c++交互的这一部分还是很感兴趣。由于本身不熟悉vs,所以在之前走了好多弯路。在看programming in lua 这本书时,lua与c交互这部分用代码实现看起来还是挺容易的,但是用vs真正用起来还是费了一点时间。下面就记录下来。
首先拿到lua 52的源码,将lua编译成为Lua52.dll 和lua52.lib两个文件,一个是静态连接库,一个是动态连接库。。用vs新建一个工程,将lua.h,lualib.h,lauxlib.h三个文件添加到资源管理器的 头文件文件夹中,最好将这三个文件复制到本地工程中。同时在源文件中添加代码:
#include<iostream>
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};
//#pragma comment(lib,"lua52.lib")
void exe_lua()
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "resource\\test.lua");
lua_close(L);
}
void use_lua_func()
{
lua_State* pLuaState;
pLuaState = luaL_newstate();
luaL_openlibs(pLuaState);
if (luaL_dofile(pLuaState,"resource\\Func.lua") != 0)
{
std::cout<<"Load Lua File Error"<<std::endl;
}
lua_getglobal(pLuaState,"Factorial");
lua_pushnumber(pLuaState,5);
lua_call(pLuaState,1,1);
lua_Number iResult = lua_tonumber(pLuaState,-1);
std::cout<<iResult<<std::endl;
lua_close(pLuaState);
}
int main()
{
//use_lua_func();
exe_lua();
system("pause");
return 0;
}
下面主要是连接lib和dll的问题。先在工程点击右键,属性-》配置属性-》连接器-》输入-》附加依赖项 中加入lua52.lib。之后
属性-》配置属性-》连接器-》常规-》附加库目录 中,将lib的目录复制到里面。将lua52.dll文件放到debug文件夹下就可以了。
test.lua内容如下:
print("Hello This is a test lua")
function show()
local b = {}
local index
for index = 1,10,2 do
print(index)
end
end
show()
Func.lua内容如下:
print("Hello This is a Lua File")
function Factorial(n)
if n == 0 then
return 1
else
return n*Factorial(n-1)
end
end