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插件啊。的主要内容,如果未能解决你的问题,请参考以下文章

C#WinForm程序设计中如何调用一些dll插件的事件?(急,如果问题不清晰,请进!)

lua能调用dll吗

lua5.2调用c++dll

C# 中如何调用DLL文件?

如何创建 Lua 模块的 dll

lua调用dll demo