1.下載swig,我這里用的是
swigwin-2.0.9.zip,官網地址http://www.swig.org/ 載解壓后,目錄下有swig.exe程序
2. 在VS中新建工程TestLua
3.添加hello.h代碼如下:
#ifndef HELLO_H__
#define HELLO_H__
int sum( int a, int b );
class Test
{
public:
int a;
int b;
Test();
void print();
};
#endif/*HELLO_H__*/
4.添加hello.cpp代碼如下:
#include "stdafx.h"
#include "hello.h"
int sum( int a, int b )
{
return (a + b);
}
Test::Test()
{
a = 10;
b = 20;
}
void Test::print()
{
printf( "%d %d\n", a, b );
}
5.編寫moduleh
ello.i文件,內容如下:
%module hello
%{
#include "hello.h"
%}
%include "hello.h"
6.使用以下命令生成文件
swig.exe -c++ -lua c:\modulehello.i
于是生成:
modulehello_wrap.cxx文件7.在工程包含
C:\Program Files (x86)\Lua\5.1\include
符加庫目錄"C:\Program Files (x86)\Lua\5.1\lib"
并且導入庫lua51.lib
8.在工程文件TestLua.cpp代碼如下:
#include "stdafx.h"
extern "C"
{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
};
#include "modulehello_wrap.cxx"
extern "C"
{
extern int luaopen_hello(lua_State* L); // declare the wrapped module
};
int _tmain(int argc, _TCHAR* argv[])
{
lua_State *L;
L=lua_open();
luaopen_base(L); // load basic libs (eg. print)
luaopen_hello(L); // load the wrappered module
if (luaL_loadfile(L,"./hello.lua")==0) // load and run the file
lua_pcall(L,0,0,0);
else
printf("unable to load %s\n","hello.lua");
lua_close(L);
return 0;
}
9.編寫lua腳本hello.lua如下:
print( "測試腳本是否被調用" );
print( "hello" );
print( "hello, tpf" );
print( "看到hello的字樣,表示腳本被調用" );
print( "-----------------------------" );
print( "下面測試函數" );
print( hello.sum( 1, 2 ) );
print( "看到數字表示函數正常被調用" );
print( "-----------------------------" );
print( "下面測試類調用" );
a = hello.Test();
print( "-----------------------------" );
print( "成員變量>>>", a.a );
print( "成員變量>>>", a.b );
print( "下面測試成員函數" );
a:print();
print( "看到數字表示成員函數被正常調用" );
10.得出結果如下:
測試腳本是否被調用
hello
hello, tpf
看到hello的字樣,表示腳本被調用
-----------------------------
下面測試函數
3
看到數字表示函數正常被調用
-----------------------------
下面測試類調用
-----------------------------
成員變量>>> 10
成員變量>>> 20
下面測試成員函數
10 20
看到數字表示成員函數被正常調用