「hmLJ・LuaJIT」の例題 リスト(テーブル)との値のやり取り概要LuaJITの例題のひとつとなります。 リストやタプルと添え字アクセスリストやタプルへののアクセス関数を確かめてみましょう。 #L = loaddll( hidemarudir + "\\" + "hmLJ.dll" ); #_ = dllfunc(#L, "DoString", "" + "ary = {1, 2, 3}\n" + "ary2 = {unpack(ary)}\n" // iタイプのシャロウコピー ); #target = dllfunc(#L, "GetNumItemOfList", "ary2", 2); // ary2[2]を数値として取得ということ message(str(#target)); #_ = dllfunc(#L, "SetStrItemOfList", "ary2", 2, "abc"); // ary2[2] = "abc"ということ #ary2len = dllfunc(#L, "GetLenOfList", "ary2"); message("以下配列の中身を順々に表示"); ##i = 1; // Luaの配列は1からスタート while(##i <= #ary2len ) { $$elem = dllfuncstr(#L, "GetStrItemOfList", "ary2", ##i); message($$elem); ##i = ##i + 1; } freedll( #L ); 整数での添え字が可能なことの意味テーブル本体ではなく、テーブルにくっ付けてあるメタテーブルにも対象となります。 次のようなマクロや関数の使い方も問題なく成立します。 #L = loaddll( hidemarudir + "\\" + "hmLJ.dll" ); #_ = dllfunc(#L, "DoString", "" + "aaa = {a = 3, b = 5, c = 8}\n" + "setmetatable(aaa, { __index = { d = 1000, e = 3000 } } )\n" ); ##elem = dllfunc(#L, "GetNumItemOfDict", "aaa", "e"); // aaa.e を数値として取得 message(str(##elem)); freedll( #L ); |