代码之家  ›  专栏  ›  技术社区  ›  Brian T Hannan

如何调用来自Lua的C++ DLL中的函数?

  •  4
  • Brian T Hannan  · 技术社区  · 14 年前

    我有一个用C++编写的DLL,它是遗留代码,不能修改源代码。我希望能够从 Lua .

    例如,我想这样做:

    -- My Lua File
    include(myCppDll.dll)
    
    function callCppFunctionFromDll()
         local result = myCppFunctionFromDll(arg1, arg2)
         --Do something with result here
    end
    

    这样的事情有可能吗?

    3 回复  |  直到 14 年前
        1
  •  3
  •   RBerteig Keith Adler    14 年前

    如果Alien不满足您的需要,而且如果DLL有一个强烈的面向对象的接口,您需要了解对象的成员和方法,以及调用导出函数,那么您应该考虑生成一个包装DLL,将旧API从DLL接口到Lua。

    这可以通过包装生成器来完成,例如 Swig 它将根据类和函数的声明为Lua以及许多其他脚本语言编写包装器,通常只需要输入比现有.h文件多一点的内容。

    Lua的代码也足够简单,可以更简单地用C语言手工编写自己的包装器。要做到这一点,从C语言中创建Lua可调用模块的标准方法开始,并实现将参数从Lua堆栈传输到适合于每个API调用的形式、调用到DLL以及将任何结果推回到Lua ST上的函数。ACK。这也是利用Lua为那些在dll中必须使用输出指针处理第二个(或更多)返回值的函数返回多个结果的能力的地方。一 discussion of the issues 一些示例代码可以在Lua用户的wiki上找到。

    还有一页专门介绍 binding Lua to other languages 在Lua用户的wiki上。

        2
  •  3
  •   Alexander Gladysh    14 年前
        3
  •  0
  •   Puppy    14 年前

    你必须使用一个自动化工具,或者手工编写,一个C++接口。Lua不能处理直的C++代码。