使用SWIG将c++类封装为Lua可用 - 需要简单的示例。

我在使用SWIG和Lua时是一个绝对的初学者,我只是一个平庸的C++开发者,我似乎不理解如何将C++类与Lua绑定起来。

我的最终目标是拥有一个类的实例,将其传递给我的lua脚本,在特定的方式下操纵该对象,然后我可以在C++中检索该对象并对其进行其他任何操作。

现在,我已经下载了Lua和C++,编译了一些示例,我能够在我的C++程序中运行一些lua脚本。到目前为止都很好。

现在,我已经下载了SWIG。我在Windows 7上使用VC2010。据我所理解,我应该创建一个接口文件。因此,我创建了一个example.i:

module creature
class Creature
{
public:
    Creature(void);
    Creature(int id);
    ~Creature(void);

(...)我的类的剩余部分在这里

(只需将%module creature添加到Creature.h中,并将其保存为creature.i)。我使用以下命令运行了SWIG:

 swig -c++ -lua creature.i

然后得到了我的creature.cxx文件。

现在,我可能会让自己尴尬,但是...我不知道下一步该怎么做。我应该如何构建输出文件?我现在该如何使用它?我读过这里(http://www.swig.org/Doc1.3/Lua.html),需要将生成的文件(\ * .cxx)链接到我的代码的其余部分(因此,我只需将该文件包含在我的项目中并添加行#include“Creature.h”即可)。但是,当我编译时,我会遇到如下错误:

错误C2065:'LUA_GLOBALSINDEX':未声明的标识符
错误C2036:'const luaL_reg *':未知大小

我也尝试使用MinGW进行编译,但是我遇到了相同的问题。如果有人可以向我展示如何将这些工具结合使用的示例或逐步教程,那将太棒了,因为我很难掌握整个想法。这绝对是因为我不理解应该如何使用这些基础知识,请对初学者保持温和。

任何帮助将不胜感激。

原文链接 https://stackoverflow.com/questions/9041693

点赞
stackoverflow用户734069
stackoverflow用户734069

SWIG 是一个将脚本语言与 C 或 C++ 代码链接的工具。它作为一种 预处理 步骤:您在.swig 文件上运行 SWIG 可执行文件,它会产生一些 C 或 C++ 代码。然后,您可以将该代码构建到所需的任何项目中,并在该脚本语言中执行相应的链接。

SWIG 的 Lua 支持显然与 Lua 5.2 不兼容。事实上,您会发现很少有与 Lua 5.2 兼容的代码。如果您想真正使用 Lua 代码,请至少暂时坚持使用5.1。

2012-01-28 00:18:23
stackoverflow用户777081
stackoverflow用户777081

我的最终目标是拥有一个类的实例,将其传递到我的 Lua 脚本中,这个脚本以某种方式操作该对象,然后我在 C++ 中检索该对象,并进行其他操作。

可能我弄错了,但你不会“传递” C++ 类的实例到 Lua 中,实际上你要做的是创建 Lua 的 C++ 绑定,从而在 Lua 脚本本身中实例化 C++ 类。

例如,假设你有一个名为 Foo 的 C++ 类,有一个名为 add(x, y) 的方法。你可以通过以下方式在 Lua 中实例化和使用该类(假设你使用 Swig 创建了包装文件)。

foo_instance = Foo()
foo_instance:add(4, 3)

我在使用 Swig 和 Lua 与我的 C++ 程序时遇到了一些麻烦,因此我写了一个教程(以便我不会忘记我是怎么做的)。你可以在这里查看它... http://glennmccord.wordpress.com/2012/11/05/binding-c-to-lua-using-swig/

希望它能帮助你入门。

2012-11-05 19:45:59