小程序的梦想

一辈子做个小程序员

LUA脚本里面加载DLL

今天碰上一个人在那里说了一下在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.pdf
http://blog.csdn.net/linkerlin/archive/2008/04/06/2254725.aspx

posted on 2009-03-18 21:35 gddsky 阅读(3601) 评论(1)  编辑 收藏 引用 所属分类: 日常

评论

# re: LUA脚本里面加载DLL[未登录] 2013-11-29 15:36 alex

真是搞飞机,testmod一下子就换成luabind_test,何必呢?  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理