передача аргументов моей функции lua dll - PullRequest
2 голосов
/ 03 апреля 2012

Как я могу передать аргументы моей функции lua dll?

Я сделал простую функцию lua dll:

static int functionName(lua_State *L, int arg1, char arg2[])
{
printf("running my dll:\n");
printf("passing number: %d   passing string = %s",arg1,arg2);
return 0;
}

И использовал это в lua для запуска функции:

require "myTestDll";
myTestDll.functionName(1231544,"Hello World, I'm running my DLL.");

Но в результате получается, что он печатает неправильное число и даже не близко к правильной строке.

1 Ответ

4 голосов
/ 03 апреля 2012

Функции, которые вы регистрируете в Lua, всегда должны иметь одну и ту же сигнатуру C или C ++: int FuncName(lua_State*); Они могут принимать не больше или меньше параметров, чем эта.

Параметры Lua, передаваемые зарегистрированным функциям, являются частью lua_State*. Это первые значения, помещенные в стек Lua. Таким образом, вы можете позвонить lua_gettop, чтобы получить количество параметров. И вы можете использовать обычные функции стека Lua, чтобы извлечь их из стека.

Например, если вы хотите, чтобы ваша функция имела два параметра, где первый - число, а второй - строка, вы делаете это:

int functionName(lua_State *L)
{
  int arg1 = 0;
  const char *arg2 = NULL;
  size_t arg2Len = 0; //Lua strings have an explicit length; they can contain null characters.

  if(lua_gettop(L) != 2)
  {
    lua_pushstring(L, "Must provide two parameters to this Lua function.");
    lua_error(L);
  }

  arg1 = luaL_checkinteger(L, 1);
  arg2 = luaL_checklstring(L, 2, &arg2Len);

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