замена для luaL_getMetaTable - PullRequest
4 голосов
/ 30 ноября 2011

Я хочу включить Lua-Scripting (Lua 5.1) в моем приложении Delphi.Для этой цели я использую заголовок Files of Thomas Lavergne.

Теперь я пытаюсь зарегистрировать тип пользовательских данных в следующем примере: 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 не может быть найдена.

Это Delphi-перевод этого примера (с использованием другого типа данных, не являющегося массивом)

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 устарел, но, похоже, это: (.

1 Ответ

3 голосов
/ 30 ноября 2011

используйте lua_newmetatable(aState, 'myexample.mytype'). Дело в том (, если вы хотите продолжить, только если метатабель уже существует ), вам нужно оценить, возвращает ли он 0! Если он возвращает 0, то он хочет создать метатаблицу ... в этом случае вы можете lua_pop(aState, 1).

Просто помните, что lua_newmetatable - это функция, возвращающая целое число (которое в действительности должно быть логическим).

В противном случае вы можете подождать несколько недель, пока я выпущу Lua4Delphi версии 2, что делает все это очень простым (, а версия Professional фактически автоматизирует регистрацию типов и экземпляров Delphi с помощью Lua )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...