lua脚本调用二进制dll
luyued 发布于 2011-02-07 23:47 浏览 N 次lua脚本可以调用二进制的dll,看一下lua的源码就理解了,本质上和lua调用exe的注册函数是一样的.相关要认识的要点如下:
1.lua脚本只能调用dll中的指定函数,而不是整个DLL.
2.lua调用的函数必须满足lua注册函数的特定格式.
3.lua 5.1后使用package.loadlib.当然以后会不会变是另回事了.
基本过程,那我开始讲吧:
1.新建个dll工程.加入lua支持,总之你能让编译通过即可.
//---------------test.dll-----------------
//标准定义宏
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
//lua支持
extern "C"
{
}
#pragma comment(lib,"LuaXX.lib")
//函数定义与实现
extern "C" MYDLL_API int LuaDllFunc(lua_State* L)
{
}
//----------------------------------------
2.在lua脚本中调用.下文中,func实际只是函数指针,实际调用请加()及相关参数.
-- ----------loaddll.lua------------------
local func = package.loadlib("test.dll","LuaDllFunc")
if type(func)=="function" then
end
-- ---------------------------------------
3.在标准程序lua.exe中调用,输入dofile("loaddll.lua")就完事了.
扩展方式:
网上有个扩展方式,本质上是使用了lua的openlib自定义lib的功能,写在这里很容易误导学习者对lua调用dll的理解,但这种方式比较类似 dll的一些特性,对于习惯用dll的人来说不失为一种好的做法,所以我放在后面.这种扩展不是必须的.如果你不想用,大可不必看.
//扩展......
static int AFuncIns (lua_State *L)
{
}
static const struct luaL_reg mylibary [] = {
};
extern "C" MYDLL_API int luaopen_mylib (lua_State *L)
{
}
//end
-- lua脚本调用
local func = package.loadlib("test.dll", "luaopen_mylib")
if type(func)=="function" then
end
-- 以后就可以用mylib这个脚本函数库了.
mylib.AFunc()
-- end
- 05-20· 证 据 目 录的格式
- 05-14· 发现一个BUG nForce2 的主板
- 05-14· NEC EXPRESSCLUSTER X3.0 FOR WIN
- 05-14· 最近有什么好听的歌呢?
- 05-13· 小园子的惊喜
- 05-13· 推荐的电脑配置
- 05-13· 飒飒秋风起,点点胭脂泪
- 05-13· 振作!!
- 05-11· 宏碁/精英有意并购浩鑫
- 05-11· [转]真实:17岁少年在校不
- 05-09· 3、21--3、25成长足迹公布
- 05-09· 和小伙伴闹矛盾(3月5日)
- 05-09· 浩鑫简约 X27D
- 05-09· 今天有点烦躁
- 05-09· 为什么富士康郭台铭最看
- 05-09· 南通热线信息超市_南通汽
- 05-09· [置顶]iPad2零组件供应商剖
- 05-09· 北京富士康科技有限公司
- 05-09· 富士康去年亏损2.18亿美元
- 05-09· 《富士康十二连跳在这以