2016-04-21 13 views
3

Ich habe ein C++ - Programm, das einen lua_State erstellt und benutzerdefinierte Lua-Skript ausführen. Wenn ich möchte, dass der lua_State cjson vorlädt, anstatt "require" im Lua-Code aufzurufen, kann ich wissen, ob es möglich ist und wie kann ich das tun?Verwenden von Cjson in eingebettetem Lua in C++

Antwort

2

Ja, es ist möglich. Verwenden Sie dazu luaL_requiref. Verwenden Sie this oder this Funktion als Argument. Sie müssen den cjson-Code mit Ihrer ausführbaren Datei verknüpfen, und der Compiler würde wahrscheinlich eine Funktionsdeklaration für die luaopen_*-Funktionen zu schätzen wissen. Wenn Sie Lua 5.1 verwenden (welches noch nicht über luaL_requiref verfügt), können Sie Compat-5.3 verwenden oder stehlen.

+0

Vielen Dank für Ihre Antwort! Aber beide Funktionen, die Sie erwähnt haben, sind in der .c-Datei statt in der Header-Datei definiert. Bedeutet das, dass ich ihren Code ändern oder die Funktion in einer Header-Datei verfügbar machen muss? – keelar

+1

Sie können eine Header-Datei erstellen und sie einschließen oder einfach eine Deklaration 'int luaopen_cjson (lua_State *);' am Anfang Ihres eigenen Quellcodes einfügen. – siffiejoe

1

Sie können Request einmal über C++ aufrufen und eine globale Variable aus dem Rückgabewert erstellen, wenn Sie in Scripts nicht require aufrufen möchten.

Zum Beispiel in C++ zu tun:

if (luaL_dostring(L, "cjson = require(\"cjson\")")) // run code 
    std::cout << luaL_checkstring (L, -1) << std::endl; // print error 

und nach, dass Sie cjson in Ihren Skripte wie cjson.new() ohne irgendwelche erfordern oder solche Anrufe verwenden können, da es als eine globale Variable existiert.

Da erfordert von C++ verwendet wurde, dann wird später in lua erfordert Aufruf nicht wieder die cjson Datei läuft anders als mit dofile oder ähnlichen