更新:问题已解决。 dll不能静态链接到lua,否则会因检测到 多个Lua VM 异常而崩溃。代码打击实际上工作正常,只是留在这里以防万一有人也遇到这个问题。
Wirehark使用lua5.2,因为那里有" lua52.dll"在它的文件夹中。
我正在编写wireshark插件,C语言中的某些算法难以在Lua中实现,所以我尝试通过dll使用这些算法。
大多数在线示例都使用旧版本的Lua,它在dll代码中使用luaL_register
。 luaL_register
在新版本中被lua_newtable
/ luaL_setfuncs
取代,但我在网上找不到任何有效的工作示例。
这是我尝试的内容:
#include <stdio.h>
#include <string.h>
#include "lua.hpp"
#include <windows.h>
extern "C" {
static int add(lua_State* L)
{
MessageBox(0, "", "", 0);
double op1 = luaL_checknumber(L,1);
double op2 = luaL_checknumber(L,2);
lua_pushnumber(L,op1 + op2);
return 1;
}
static luaL_Reg mylibs[] = {
{"add", add},
{0, 0}
};
__declspec(dllexport)
int luaopen_mylib(lua_State* L)
{
lua_newtable(L);
luaL_setfuncs(L, mylibs, 0);
lua_setglobal(L, "mylib");
return 1;
}
}
和lua代码:
require "mylib" -- <----------crashes
-- local mylib = package.loadlib("mylib.dll","luaopen_mylib");
print (mylib)
if(mylib)then
--mylib();
else
-- Error
end
local b=mylib.add(11,33);
print("sum:", b);
lua代码在第一行崩溃。如何解决?
另一个问题,如何验证哪个版本的Lua是wireshark使用的?在wireshark的lua控制台中调用print(_VERSION)
,它什么都没有显示。
答案 0 :(得分:0)
当静态链接到lua.lib时发生崩溃,我猜lua.lib中已经有一个lua VM,所以使用动态链接,问题就消失了。