c - passerende argumenter til min lua dll funktion

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan kan jeg passere argumenter til min lua dll-funktion?


Jeg lavede en simpel lua dll funktion:


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


Og brug dette i lua til at køre funktionen:


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


Men resultatet er, at det udskriver det forkerte tal og ikke engang tæt på den korrekte streng.

Bedste reference


Funktioner, du registrerer til Lua, skal altid have samme C- eller C ++-signatur: int FuncName(lua\_State*); De kan ikke tage mere eller mindre parametre end det.


Lua parametre, der sendes til registrerede funktioner, er en del af lua\_State*. De er de første værdier placeret på Lua stacken. Så du kan ringe lua\_gettop for at få antallet af parametre. Og du kan bruge de sædvanlige Lua stack-funktioner til at trække dem ud af stakken.


For eksempel, hvis du vil have din funktion til at have to parametre, hvor den første er et tal og den anden er en streng, gør du det her:


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.
}