Wie registriere ich Lua Benutzerdaten korrekt aus Delphi?

8

Ich bin immer noch verwirrt darüber, Delphi-Benutzerdaten an Lua zu registrieren. Um mir das Prinzip beizubringen, habe ich versucht, einen Date (Time) Typ zu implementieren.

Am Anfang sollte dieser Typ drei Funktionen haben, die für Lua zugänglich sind:

  1. Eine new -Funktion zum Erstellen von Variablen dieses Typs.
  2. Eine getdate Funktion.
  3. und eine setdate -Funktion.

Am Ende sollte dieses kleine Lua-Script funktionieren:

%Vor%

Ich habe versucht, es selbst zu implementieren (mit dem Programmieren in Lua Buch), aber ich erhalte eine Fehlermeldung, die sagt : _attempt to index global 'DT' (a userdata value)_ in Zeile 2. Ich habe wahrscheinlich etwas falsch mit der Benutzerdatenregistrierung gemacht, aber ich habe Probleme, den Fehler zu finden.

Ich hoffe du kannst mir helfen es zu finden, hier ist was ich schon habe:

%Vor%

Weil ich mir über die Funktion luaL_register nicht sicher bin (funktioniert das nur, indem ich eine Bibliothek erstelle, die mit require aufgerufen werden muss?) Ich habe auch versucht, die Funktion RegisterDateTime durch folgende zu ersetzen:

%Vor%

Leider ist der Effekt (errormessage;)) bei beiden Versionen von RegisterDateTime gleich. Sie werden direkt in meinem Delphi Programm aufgerufen, bevor das Skript startet (ich habe dies durch Setzen von Haltepunkten in "RegisterDateTime" und "newdatetime" sichergestellt. Beide Funktionen werden in dieser Reihenfolge aufgerufen. Also muss mein Fehler in einer dieser beiden Funktionen sein bin mir fast sicher, dass es eine einfache Sache ist, aber ich bin blind, um es zu sehen.: (

    
knowledge stacker 01.12.2011, 11:12
quelle

1 Antwort

3

Heute habe ich den großen Reset Button dieses Projektes gedrückt und die Implementierung meines LuaDateTime-Type komplett neu gestartet und diesen Tag habe ich richtig gemacht. Jetzt möchte ich meine Lösung als Beispiel für jeden anderen, der das gleiche Problem hat, veröffentlichen.

Mein größter Fehler gestern war es, das __index -Feld meiner Metatabelle zu vergessen. Eine funktionierende Delphi-Implementierung für Lua-Benutzerdaten sieht folgendermaßen aus:

%Vor%

Sie müssen luaopen_LuaDateTime von Delphi aufrufen, um den Typ in Ihrem Lua-State zu registrieren. Danach können Sie ein Lua-Script wie folgt ausführen:

%Vor%

Ich hoffe, das ist hilfreich für jemand anderen.

    
knowledge stacker 02.12.2011, 16:21
quelle

Tags und Links