LUA 如何调用DLL插件啊。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LUA 如何调用DLL插件啊。相关的知识,希望对你有一定的参考价值。
是WINDOWS插件
参考技术A 插件?不太明白。如果是调用dll,分两种情况,一种就是按照lua扩展的规范来,可以参考programing lua那本书,当然,用swig封装也很方便的。 还有一种就是借助于FFI库,很多脚本语言现在都支持ffi调用c生成的dll了。如果你的dll是com服务器,好像lua有个专门的扩展支持调用com的。 一切依赖于你的实际情况。 其实dll也不光是windows下的,linux下是so,调用起来也类似的。本回答被提问者和网友采纳 参考技术B 今天就会突然发觉热天lua调用dll demo
使用的是lua5.3
DllMain.cpp
1 //生成的dll 是 lua_add53.dll 2 //luaopen_lua_add 3 extern "C" 4 #include "F:/lua_src/lua-5.3.5_Win64_vc15_lib/include/lua.h" 5 #include "F:/lua_src/lua-5.3.5_Win64_vc15_lib/include/lualib.h" 6 #include "F:/lua_src/lua-5.3.5_Win64_vc15_lib/include/lauxlib.h" 7 ; 8 #pragma comment(lib, "F:/lua_src/lua-5.3.5_Win64_vc15_lib/lua53.lib") 9 10 #include <iostream> 11 using namespace std; 12 13 extern "C" int ShowMsg(lua_State* luaEnv) 14 cout << "Hello world from clibs!" << endl; 15 return 0; // 返回值个数为0个. 16 17 18 extern "C" int sub2(lua_State* L) 19 20 double op1 = luaL_checknumber(L, 1); 21 double op2 = luaL_checknumber(L, 2); 22 int temp = op1 - op2; 23 lua_pushnumber(L, temp); 24 return 1; 25 26 27 // part one: 要导出的函数列表 28 static luaL_Reg luaLibs[] = 29 "ShowMsg", ShowMsg, 30 "sub2", sub2, 31 NULL, NULL 32 ; 33 34 // part two: DLL入口函数,Lua调用此DLL的入口函数. 35 extern "C" __declspec(dllexport) 36 int luaopen_lua_add(lua_State* luaEnv) //WinFeature是modole名, 将来require这个名字 37 //lua_register(luaEnv, "ShowMsg", ShowMsg); //关键一行, 在luaState上注册好这个lib 38 //lua_register(luaEnv, "sub2", sub2); //关键一行, 在luaState上注册好这个lib 39 lua_newtable(luaEnv); 40 luaL_setfuncs(luaEnv, luaLibs,0); 41 return 1; 42
编译后是 lua_add53.dll
lua
1 local mytest = require "lua_add" 2 mytest.ShowMsg(); 3 print(mytest.sub2(1,2));
以上是关于LUA 如何调用DLL插件啊。的主要内容,如果未能解决你的问题,请参考以下文章