我想在我的Delphi應用程序中啓用Lua-Scripting(Lua 5.1)。爲此,我使用Thomas Lavergne的頭文件。替換爲luaL_getMetaTable
現在我嘗試註冊下面這個例子中用戶數據類型:http://www.lua.org/pil/28.2.html
在「新的數組功能」,它使用的命令* luaL_getmetatable *。
static int newarray (lua_State *L) {
int n = luaL_checkint(L, 1);
size_t nbytes = sizeof(NumArray) + (n - 1)*sizeof(double);
NumArray *a = (NumArray *)lua_newuserdata(L, nbytes);
luaL_getmetatable(L, "LuaBook.array");
lua_setmetatable(L, -2);
a->size = n;
return 1; /* new userdatum is already on the stack */
}
不幸的是* luaL_getmetatable *函數在我的頭文件中被標記爲舊的並且註釋掉了。我試圖再次激活它,但如預期,我會得到一個錯誤,因爲無法找到DLL入口點。
這是一個例子的德爾福平移(使用其他非數組類型)
Type
tMyType = tWhatever;
pMyType = ^tMyType;
{...}
Function newusertype(aState : pLua_State) : LongInt; cdecl;
Var
NewData : pMyType;
Begin
Result := 0;
NewData := lua_newuserdata(aState, SizeOf(tMyType));
NewData^ := GetInitValue;
luaL_getMetaTable(aState, 'myexcample.mytype'); // Error/unknown function
lua_setmetatable(aState, -2);
Result := 1;
End;
現在我正在尋找一個替代luaL_getMetaTable的。我還沒有找到任何關於其中的信息。其實我還沒有發現任何信息luaL_getMetaTable已經過時,但它似乎是:(。
你可以試試這個[lua-5-1-for-delphi-2010](http ://blog.spreendigital.de/2009/09/28/lua-5-1-for-delphi-2010/)包裝器或其他列在這裏[BindingCodeToLua](http://lua-users.org/wiki/ BindingCodeToLua)。 –
感謝您使用「BindingCodeToLua」鏈接。我已經回顧了大部分Delphi相關的包裝器。他們中的大多數人的表現會與托馬斯·拉維涅相同或者更少,但Lua4Delphi的例子和「擴展」很有趣。 –