从嵌入式Lua读取和写入C结构体

我想嵌入lua以在我的C++应用程序中进行脚本编写。特别是,我有两个结构体,我想将它们作为参数传递给给定的lua函数。一个是只读的,另一个是可读/写的。以下是这些结构体的高度简化示例:

struct inData
{
    int x;
    int y;
    // 许多其他字段
};

struct outData
{
    int a;
    double b;
    // 其他字段
};

这两个结构体都是在C++代码中创建的,并且在调用lua函数之前和之后都将在那里处理。我如何将这些结构传递给lua函数,使函数可以执行以下操作:

if(inData.x > 5) then outData.a = 1 end

并且在从lua函数返回后,outData实例实际保留更改?

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

点赞
stackoverflow用户298661
stackoverflow用户298661

你可以使用 userdata 并将 outdata\* 放入其中。可以在其中设置自定义函数,包括元表。我不会详细说明,因为这需要大量的样板/粘合代码。基本上,您可以在堆上创建 outdata,使轻量级 userdata 指向它(通过一个非常邪恶的类型转换),然后设置自定义元表并使用 __index 使数据访问使用自定义函数。

基本上,这是可行的,但极其无聊。同时也很危险,因为 Lua 不理解任何 C(或 C ++)类型,并且您一直处理 void *

2010-09-13 20:12:24
stackoverflow用户103167
stackoverflow用户103167

boring + boilerplate + multi-language = SWIG.

这条式子表示,SWIG 是将无聊的模板代码与支持多种编程语言结合起来的结果。

详情请参阅SWIG官网

2010-09-13 20:29:33
stackoverflow用户1491
stackoverflow用户1491

你也可以创建一个 Lua 表格来反映这个相同的数据结构,以便在 C 和 Lua 之间传递信息。

2010-09-13 21:50:35