今天碰上一个人在那里说了一下在LUA里面加载DLL的模块,因为没有接触过,也就去试了一下,其实挺简单。
我在这里定义这个模块的名字为testmod。
建立一个LUA文件:
file test.lua
require("testmod")
新建一个DLL工程,命名为testmod,并在工程里面加入一个函数:
extern "C" int luaopen_testmod(lua_State* L);
luaopen_testmod这个的目的是:
LUA的require会在找不到.lua文件的情况下去找对应名字的.dll文件,当找到对应名字的dll文件时,将会尝试获取DLL里面的luaopen_modname的函数,并执行它,所以我们这里定义的luaopen_testmod,其实就是DLL对应LUA的初始化函数。
这有个例子:
1 5.1 Hello World
2 新建一个控制台DLL工程, 名字是 luabind_test.
3
4 #include <iostream>
5 #include <luabind/luabind.hpp>
6 #include <luabind/lua_include.hpp>
7
8 extern "C"
9 {
10 #include "lua.h"
11 #include "lauxlib.h"
12 }
13
14 void greet()
15 {
16 std::cout << "hello world!\n";
17 }
18
19 extern "C" int luaopen_luabind_test(lua_State* L)
20 {
21 using namespace luabind;
22
23 open(L);
24
25 module(L)
26 [
27 def("greet", &greet)
28 ];
29
30 return 0;
31 }
32
33
34
35 把生成的DLL和lua.exe/lua51.dll放在同一个目录下.
36
37 Lua 5.1.2 Copyright (C) 1994-2007 Lua.org, PUC-Rio
38 > require "luabind_test"
39 > greet()
40 Hello world!
41 >
42
参考:
http://www.inf.puc-rio.br/~roberto/pil2/chapter15.pdfhttp://blog.csdn.net/linkerlin/archive/2008/04/06/2254725.aspx