使用lua除了可以直接使用DLL之外,再有一个方法就是直接使用lua的静态lib,在这里我们将介绍使用静态lib的方法。
1.编译静态lib
我们这里使用的是lua-5.1.4.CN.7z版本,我们新建一个lib工程,注意不勾选“Pre-Compiled header”支持,然后将源码文件里src下目录文件全部拷贝到新建的工程目录下,除了print.c、lua.c、luac.c这三个文件之外,其他的文件都添加到工程中去,然后F7编译,就会在目录下面看到一个lib文件。这个就是我
们需要的lib库,如果编译不成功,看提示错误,一般情况,都是可以编译通过的。
2.使用lib
为了使用lua的静态库,我们需要4个文件支持lauxlib.h,lua.h,luaconf.h,lualib.h,我们可以将这4个文件直接拷贝到工程目录下调用,也可以讲其拷贝到vc include目录下,这样以后调用lua就不需要重新拷贝操作了,lib文件也作重样的处理。
在这里为了工程的可移植性(在没有配置lua环境下的机器上编译),我就直接将相关文件直接拷贝到工程目录 \lua 下了。
vc使用静态lib的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # include "stdafx.h"
# include <windows.h>
//头文件支持
extern "C"
{
# include "Lua\lua.h"
# include "lua\lualib.h"
# include "lua\lauxlib.h"
}
//lib库支持
#pragma comment(lib, "lua\\lua5.14.lib" )
//VC函数
static int Msg(lua_State *L)
{
const char * pStr = lua_tostring(L, 1 );
::MessageBox(NULL, pStr , "LuaTest" , MB_OK);
return 0 ;
}
int main( int argc, char* argv[])
{
lua_State *L= luaL_newstate();
//加载lua基础库
luaL_openlibs(L);
//注册VC函数,让lua虚拟机能够识别可调用的函数
lua_register(L, "MsgBox" , Msg);
if (luaL_dofile(L, "LuaTest.lua" )!= 1 )
{
printf( "执行失败~ \r\n" );
}
lua_close(L);
return 0 ;
}
|
lua调用代码:
编译之后,将脚本拷贝到exe目录下,运行就会弹出一个消息框。