2016-05-22 4 views
0

Hier ist meine C++ Hauptfunktion:LuaBridge läuft C++ Hauptfunktion in lua für Love2D

int main() { 
lua_State* L = luaL_newstate(); 
luaL_openlibs(L); 
getGlobalNamespace(L). 
     beginNamespace("o"). 
      beginClass<Object>("Object"). 
       addConstructor<void (*) (double, double)>(). 
       addProperty("width", &Object::getWidth, &Object::setWidth). 
       addProperty("height", &Object::getHeight, &Object::setHeight). 
       addProperty("x", &Object::getX, &Object::setX). 
       addProperty("y", &Object::getY, &Object::setY). 
      endClass(). 
     endNamespace(); 
lua_pcall(L, 0, 0, 0); 
luaL_dofile(L, "main.lua");} 

Und hier ist mein main.lua für Love2D

function love.load() 
    obj = o.Object(10, 20) end 

Als ich versuchte, es mit Liebe zu laufen es sagt, dass obj ein Nullwert ist und ich erkannte, dass Love2D meine Hauptfunktion in C++ nicht ausführt, um die Objektklasse zu erstellen. Wie rufe ich eine C++ - Hauptfunktion in Lua mit LuaBridge auf?

Antwort

0

Was Sie tun, verwendet zwei separate Programme: das, das Sie mit Ihrer "Hauptfunktion" und die tatsächliche ausführbare Love2D-Datei erstellen. Sie sind separate ausführbare Dateien; sie haben keine Beziehung mehr als lua.exe hat python.exe.

Was erscheinen Sie wollen sein ist zu tun, um eine C++ Bibliothek zu schreiben, die von Love2D verwendet wird. Sie können das tun, aber Sie müssen schreiben, nicht ein C++ - Programm, sondern eine dynamische Bibliothek. Sie müssen ein Lua C-Modul schreiben.

Wie Sie eine dynamische Bibliothek schreiben, hängt von Ihrer bevorzugten Plattform ab. Diese dynamische Bibliothek muss jedoch die entsprechenden Funktionen exportieren, wie in the Lua 5.1 documentation beschrieben. Wenn Ihr C-Modul den Namen "test" hat, muss es eine Funktion namens luaopen_test exportieren.

Die Aufgabe dieser Funktion ist im Wesentlichen, was Ihre main tut. Ihre luaopen_ Funktion muss keinen Lua-Status erstellen; es wird eins gegeben werden. Es ist Aufgabe, eine Tabelle zurückzugeben, die die Funktionen und APIs enthält, die Sie in Ihrem Modul exportieren möchten. So registriert es alles bei Bedarf mit Lua.

Ihre main legt ihre Sachen in den globalen "Namespace", aber das wird allgemein als ziemlich unhöflich angesehen. Es ist besser, eine lokale Tabelle zu erstellen und Ihre Daten dorthin zu stellen, indem Sie die Tabelle als Rückgabewert zurückgeben. Ich kenne die API von LuaBridge nicht, daher weiß ich nicht, wie ich das machen soll.

Im schlimmsten Fall können Sie eine globale Tabelle wie derzeit erstellen, aber nach dem Erstellen laden Sie sie in eine lokale Tabelle, löschen den globalen Eintrag und geben die Tabelle zurück.