我的问题与此类似: 如何使用C API创建嵌套的Lua表
我以为我明白这个答案,但我仍然有问题.
我有一系列我想要返回的对象.
const char * pushlist[] = {
"status", "cmdsequence", "timestamp", "gain",
};
int nItems = sizeof(pushlist) / sizeof(char *);
int iDepth = -(1 + nItems);
// //
// What we want to do is essentially push an array of tables.
// The tables have keys (see pushlist above) and values.
// The array is indexed by integers from 1 through N.
//
lua_newtable( L );
for( Json::Value::UInt i = 0; i != totFrames; i++ )
{ …Run Code Online (Sandbox Code Playgroud) 我有一个用C#编写的DLL,由Lua脚本使用.脚本"需要CLRPackage".到目前为止,我可以使用load_assembly()和import_type()来获取DLL中的类和方法.我传回简单的值和字符串,这一切都有效.
不,我需要将一个通用集合传递给Lua.我相信Lua会看到的是一个表,但我不清楚如何在C#中创建该表并将其传回.
这似乎是一个类似的问题,但我没有看到如何实现它.是否有另一种解决方案或一个带有剥离代码片段的解决方案?
我正在创建一个将从Lua调用的C/C++函数.我的函数必须调用一个库函数,其签名是这样的:
void libFunction( int val1, int val2, tSETTINGS * pSettings );
Run Code Online (Sandbox Code Playgroud)
我给了这些C/C++结构.
typedef struct
{
int cmd;
int arg;
} tCOMMAND;
typedef struct
{
int numberCommands;
int id;
tCOMMAND commands[1];
} tSETTINGS;
Run Code Online (Sandbox Code Playgroud)
也许我的想法在这方面都是错的,但是从Lua我这样称呼:
id = 42
val1 = 1
val2 = 2
cmd1 = { 3, 4 }
cmd2 = { 5, 6 }
commands = { cmd1, cmd2 }
settings = { #commands, id, commands }
mycfunction( val1, val2, settings )
Run Code Online (Sandbox Code Playgroud)
我确信我仍然不理解从C++引用的Lua堆栈,因为我正在尝试的东西不起作用.我的解决方案能够检索val1,val2,#command和id,但是当我尝试检索命令[0]和命令[ 1 ]时,我分别得到{1,2}和{ 2,42 }.
我的C++基本上就是这样(对于这个样本我正在丢弃这些值).我已经检索了val1和val2:
int stkNdx …Run Code Online (Sandbox Code Playgroud)