使用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目錄下,運行就會彈出一個消息框。
