从lua脚本调用c函数

时间:2014-01-22 11:08:49

标签: c lua mysql-proxy

我找到了一些关于此的参考资料,但我无法让它们发挥作用。我有一个带有mysql和mysql-proxy的Debian盒子。我正在使用LUA脚本拦截SQL查询。

function read_query(packet)
        if packet:byte() ~= proxy.COM_QUERY then
                print("error read (COM_QUERY)")
        end
    local query = packet:sub(2)
    print ("query : " .. query )
           //Transformation here
    return proxy.PROXY_SEND_QUERY
end

我想解析和处理查询,所以我可以用我已经开发的一些c函数重写它。我试图找到调用此函数的方法,但我发现c MAIN函数启动LUA注册过程的唯一方法。

有没有办法让LUA脚本在编译的C文件中调用该函数?

我应该如何制作(LUA)和接收(C)电话的任何例子?

2 个答案:

答案 0 :(得分:0)

摘自lua.org

当我们说Lua可以调用C函数时,这并不意味着Lua可以调用任何C函数。(有些软件包允许Lua调用任何C函数,但它们既不可移植也不健壮。)... ...要从Lua调用C函数,我们必须注册它,也就是说,我们必须以适当的方式将其地址提供给Lua。

你应该看看here

答案 1 :(得分:0)

SWIG是为您生成绑定的好选择:www.swig.org。您创建一个.i文件,在其中加载您的C头,SWIG为您生成所有绑定代码。然后编译生成的代码,将其链接到您的C库和Lua库,并在脚本中输入require'yourCLibrary',您可以执行您想要的操作。非常实用,您的包装器可用于从其他语言(如Python和C#)访问您的库。