Lua - Funktionen aus BlitzMax in Table einbetten
Übersicht

![]() |
RatchetBetreff: Lua - Funktionen aus BlitzMax in Table einbetten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man hat ja die Möglichkeit BlitzMax Funktionen in Lua bekannt zu machen und diese dann in Lua aufzurufen. Ich möchte jetzt meine eigenen Funktionen in einen Table legen. Eigentlich das gleiche Prinzip wie es mit den Libaries schon in Lua drin ist, also z.B. strings.find()
Lua Beispiel wie es jetzt ist: Code: [AUSKLAPPEN] if expression then meinefunktion() end Lua Beispiel wie es sein soll: Code: [AUSKLAPPEN] if expression then meintable.meinefunktion() end Nur noch mal als Hinweis, es geht um Funktionen die ich in BlitzMax geschrieben habe und in Lua bekannt gemacht habe, nicht um Funktionen die ich in Lua selber definiere. Ich finde keine Möglichkeit eine Funktion einem Table zuzuweisen, weiss aber das es geht. Hat jemand schon mal soetwas gemacht? |
||
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro] |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
willst du die Funktionen in einen Type speichern oder in einer list? | ||
between angels and insects |
![]() |
Ratchet |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich spreche von Lua. Die Funktion soll in einen Lua-Table rein. Nicht in Blitz in einen Type oder eine Liste. | ||
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro] |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
achso,
ich dachte, du redest von dem LUA Bmax quellcode. |
||
between angels and insects |
![]() |
Ratchet |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nicht das wir uns falsch verstehen: die Zuweisung der Funktion zum Table muss über BlitzMax geschehen.
[edit] Soweit ich das verstehe sollte das beim Registrieren der Funktion mit lua_settable funktionieren. Doch wie finde ich nun meinen Table; dort nur einen Index übergeben? Und aus lua_gettable werde ich auch nicht schlau. [/edit] |
||
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro] |
![]() |
Ratchet |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bin jetzt ein Stück weiter. Ich kann nun eine Funktion in einen Table einbetten. Allerdings dauert das sehr lange. Und was ich überhaupt nicht verstehe: Warum muss der TableIndex in der letzten Zeile meines Codes (lua_settable) -3 sein muss. Nur dann funktioniert es. Eigentlich müsste ich dort ja den TableIndex meines Tables angeben, ich weiss nur nicht wie ich den rauskriege. Jemand eine Idee?
Code: [AUSKLAPPEN] ' Create a new table
lua_pushstring(L, "myTable") lua_newtable(L) lua_settable(L, LUA_GLOBALSINDEX) ' Register custom function into table lua_pushstring(L , "myTable") lua_gettable(L , LUA_GLOBALSINDEX) lua_pushstring(L, "myFunction") lua_pushcfunction(L, myCustomFunction) lua_settable(L, -3) |
||
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro] |
![]() |
Ratchet |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke mal ihr wollt genauso wenig wie ich dumm sterben, also hier die Lösung:
Code: [AUSKLAPPEN] 'Neuen Table mit Namen MyTable erzeugen
lua_pushstring(Lua.m_lua_state,"MyTable") lua_createtable(Lua.m_lua_state,0,1) 'Function Lua_MyFunction als MyFunction innerhalb des Table registieren lua_pushstring(Lua.m_lua_state,"MyFunction") lua_pushcfunction(Lua.m_lua_state, Lua_MyFunction) lua_settable(Lua.m_lua_state,-3) 'Den Table in den globalen Bereich schieben lua_settable(Lua.m_lua_state,LUA_GLOBALSINDEX) So kann ich dann in Lua die Funktion aufrufen: Code: [AUSKLAPPEN] MyTable.MyFunction()
|
||
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro] |
- Zuletzt bearbeitet von Ratchet am Di, März 25, 2008 16:52, insgesamt 2-mal bearbeitet
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der Thread ist zwar nun schon etwas älter, aber ich wollte keinen neuen erstellen:
Habe das nun auch mal versucht, bekomme es allerdings leider nicht hin. Lua behauptet, das meine Table (z.B. namens "SC") nicht existieren würde. Habe leider keine Ahnung, was ich nun falsch mache. (Man bin ich immer Ahnungslos ![]() |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
Ratchet |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also mein Beispiel funktioniert auf jeden Fall. Poste doch mal ein wenig Code, weil sonst kann dir wohl keiner helfen. | ||
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro] |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also, hab es im großen und ganzen so mal übernommen. Ich weiß allerdings leider nicht, für was alle Parameter der Funktionen gut sind.
Hier mal ein Codeabschnitt: Code: [AUSKLAPPEN] lua_pushstring(TLua.scriptEnv.m_lua_state,"MyTable") lua_createtable(TLua.scriptEnv.m_lua_state,0,1) lua_pushstring(TLua.scriptEnv.m_lua_state,"Create") lua_pushcfunction(TLua.scriptEnv.m_lua_state, LCreateShortcut) lua_settable(TLua.scriptEnv.m_lua_state,-3) Lua gibt mir ganz einfach zurück: Zitat: Test.lua:3: attempt to index global 'MyTable' (a nil value)
Falls mehr Code nötig ist, einfach sagen ![]() Danke schonmal ![]() PS: Ich dachte, dass der Code evt. veraltet sein könnte. |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
Ratchet |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, da fehlte noch eine Zeile (die Letzte):
Code: [AUSKLAPPEN] ' Table erstellen
lua_pushstring(lua,"MyTable") lua_createtable(lua,0,1) 'Erste Funktion hinzufügen lua_pushstring(lua,"MyFunction1") lua_pushcfunction(lua, MyLuaFunction1) lua_settable(lua,-3) 'Zweite Funktion hinzufügen lua_pushstring(lua,"MyFunction2") lua_pushcfunction(lua, MyLuaFunction2) lua_settable(lua,-3) 'Den Table in den globalen Bereich schieben lua_settable(lua,LUA_GLOBALSINDEX) |
||
[iMac 27"] [3,4GHz Intel Core i5 ] [8GB Ram] [NVIDIA GeForce GTX 775M 2GB] [MacOS X Yosemite] [BlitzMax + MaxGui] [Monkey X Pro] |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wow, danke! Funktioniert! ![]() Endlich ![]() PS: Hab daraus gerade mal kurz eine kleine Erweiterung geschrieben, falls es wer braucht: Code: [AUSKLAPPEN] Type TLuaScript Extends TLuaScriptEngine
Method CreateTable( TableName:String ) lua_pushstring(m_lua_state, TableName) lua_createtable(m_lua_state, 0,1) End Method Method AddTableFunction( Func:Int(ls:Byte Ptr), FunctionName:String ) lua_pushstring(m_lua_state, FunctionName) lua_pushcfunction(m_lua_state, Func) lua_settable(m_lua_state, -3) End Method Method CloseTable() lua_settable(m_lua_state, LUA_GLOBALSINDEX) End Method End Type Sollte selbsterklärend sein. Kann man ja evt. auch einfach direkt in das Modul mit einbauen. |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group