Lua Wrapper
Übersicht

Gehe zu Seite Zurück 1, 2, 3 Weiter
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst die zweite Datei auch einfach in B3D per luaL_loadfile reinladen, was für deinen Zweck wohl einfacher ist. Die Funktionen werden alle in den aktuellen Luastate gespeichert und können so ohne Probleme von anderen geladenen Scripts aufgerufen werden - wichtig ist einfach, dass du die zweite vor der ersten Datei lädst. | ||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Valnar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, wollte nur anmerken, dass der Link mit den LUA-Highlite nicht mehr funzt... | ||
[url][/url] |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für den Hinweis, ich habs angepasst. | ||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also mich würde es freuen, wenn man dieses CallFunction(func$, ...) durch z.B. eine registrierung der funktion ersetzen könnte.
z.B. Code: [AUSKLAPPEN] Function Lua_Print()
L = Lua_GetCurrentState() Print Lua_ToString(L,1) End Function ; BB-Funktion Lua-Funktion Parameter Anzahl LuaL_RegisterFunction(L, "Lua_Print", "print" , 1) Wäre sowas machbar??? |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das geht leider nicht, da Blitz3D von Haus aus keine Funktionszeiger beherrscht. Diese sind aber notwendig, wenn man Funktionen direkt registrieren will. | ||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schade. Aber gibt es nicht irgendwie eine möglichkeil Lua funktionen zu registrieren die CallFunction mit bestimmten parametern aufrufen, wie z.B.
Code: [AUSKLAPPEN] L = LuaL_CreateNewState() Lua_PushString(L, "function doThis(msg)") Lua_PushString(L, " CallFunction("+chr$(34)+"print"+chr$(34)+", msg") Lua_PushString(L, "end") wäre sowas machbar??? |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das geht natürlich. Ich habe das immer mit einem separaten Luascript gelöst, das vor allen anderen eingelesen wurde. Das könnte z.B. so aussehen Code: [AUSKLAPPEN] function Print( ... )
return CallFunction( "Print", ... ) end function DrawImage( ... ) return CallFunction( "DrawImage", ... ) end etc. etc. Die '...' sind keine Platzhalter, sondern Bestandteil von Lua. Relativ praktisch, da man die tatsächliche Anzahl der Parameter nicht kennen muss. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jop ist mir bereits bekannt ![]() Aber ist es jetzt möglich aus dem programcode luafunktionen zu laden ohne ein externes lua script zu verwenden??? |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das geht BlitzBasic: [AUSKLAPPEN] Local L = luaL_newstate() Ungetestet, müsste aber funktionieren. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
- Zuletzt bearbeitet von Noobody am Mo, Feb 08, 2010 20:03, insgesamt einmal bearbeitet
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
thx...
Ein problem hab ich noch... Lua_DoString gibts net... ![]() Problem die zweite: wenn ich es jetzt mit lua_pushstring versuche, dann meint er, dass es einen fehler in der funktion gäbe... KP wieso Hier der BB-code: Code: [AUSKLAPPEN] ;Lua test Include "Lua_Include.bb" L = LuaL_NewState() LuaL_OpenLibs(L) Stop Lua_InitInterface(L, "CallFunction") Lua_PushString( L, "function Print( ... ) CallFunction( " + Chr( 34 ) + "Print" + Chr( 34 ) + ", ... ); end" ) Status = LuaL_LoadFile(L, "LuaTest.lua") If Status Then RuntimeError "Error while loading script!" + Chr( 10 ) + Lua_ToString( L, 1 ) ;Lua_PushString(L, "function doThis(msg)") ;Lua_PushString(L, " CallFunction("+Chr$(34)+"Print"+Chr$(34)+", "+Chr$(34)+"msg"+Chr$(34)+");") ;Lua_PushString(L, "end") ;Lua_SetGlobal(L, "doThis") ;Lua_Call(L,"doThis", "hello" Status = Lua_PCall( L, 0, 0, 0 ) If Status Then RuntimeError "Error while executing script!" + Chr( 10 ) + Lua_ToString( L, 1 ) ;Selbes Prozedere Lua_Close(L) Flip WaitKey() End Function Lua_UserFunction() L = Lua_GetCurrentState() FuncName$ = Lua_ToString(L, 1) Select FuncName$ Case "Print" Print Lua_ToString( L, 2 ) ;Zweiten Parameter auslesen und auf dem Bildschirm ausgeben Lua_SetResults( 0 ) ;Wir geben nichts zurück und teilen das Lua mit Case "Line" Line Lua_ToNumber( L, 2 ), Lua_ToNumber( L, 3 ), Lua_ToNumber( L, 4 ), Lua_ToNumber( L, 5 ) ;alle vier Koordinaten auslesen, Linie zeichnen Lua_SetResults( 0 ) ;Wir geben nichts zurück Case "Millisecs" Lua_PushInteger( L, MilliSecs() ) ;Wir legen den momentanen Millisecs() - Wert auf den Stack Lua_SetResults( 1 ) ;Wir geben ein Argument zurück Case "GetDate" Date$ = CurrentDate() Lua_PushString( L, Left( Date$, 2 ) ) ;Wir teilen das Datum auf in Tage, Monat und Jahr und legen alles auf den Stack Lua_PushString( L, Mid( Date$, 4, 3 ) ) Lua_PushString( L, Right( Date$, 4 ) ) Lua_SetResults( 3 ) ;Wir geben drei Argumente zurück Case "DebugLog" DebugLog Lua_ToString( L,2 ) Lua_SetResults( 0 ) End Select End Function Lua Code: Code: [AUSKLAPPEN] dofile("Beispiel 1.lua") function test() CallFunction("Print", "In test") end CallFunction("DebugLog", "Start") CallFunction("Print", "Anfang") test() CallFunction("Print", "Ende") CallFunction("DebugLog", "End") Print("test") |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh, mein Fehler. Die Funktion heisst luaL_dostring ![]() Ich habs nachkorrigiert. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Noobody hat Folgendes geschrieben: Oh, mein Fehler. Die Funktion heisst luaL_dostring
![]() Ich habs nachkorrigiert. Gibts bei mir noch immer nich... Vielleicht doch pushstring??? |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
TheGamePope hat Folgendes geschrieben: Gibts bei mir noch immer nich.
Tatsache, die Funktion habe ich nicht gewrappt ![]() Es ist aber ein Makro, das lua_loadstring und lua_pcall kombiniert. Du musst also nur mal schnell diese Funktion zu deinem Code hinzufügen BlitzBasic: [AUSKLAPPEN] Function LuaL_DoString( L, Script$ ) |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ah thx jetzt gehts danköööö | ||
- Zuletzt bearbeitet von TheGamePope am Di, Feb 09, 2010 15:31, insgesamt einmal bearbeitet
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
TheGamePope, dürfte ich dich bitten es zu unterlassen, ganze Beiträge zu zitieren? Besonders, wenn es sich dabei um den vorherigen Beitrag handelt ist das mehr als störend für den Lesefluss.
Zitate sind dazu da, um Bezug auf eine einzelne genaue Stelle zu nehmen. Wenn man sich auf einen ganzen Beitrag beziehen will (der ja idR auch von einer einzelnen Person stammt), tut man dies üblicherweise indem man seine Aussage einfach an den Autor des Beitrags richtet (zB: "<Nickname>: Danke" ![]() Ansonsten ist aufgrund des Aufbaus hier im Forum eigentlich klar, dass man sich auf den Beitrag darüber bezieht. mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sry bin neu hier. Habs jetzt geändert | ||
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab noch mal ne Frage. In Lua ist das ja so:
Wenn ich eine Variable in einen string einbinden will, dann mach ich das doch so: Code: [AUSKLAPPEN] testString1 = "World" testString2 = "Hello "..testString1.."!" Wenn ich jetzt aber eine funktion habe, dei die ... variable benutzt, wie mach ich das dann??? Code: [AUSKLAPPEN] function test(...) print("Vars: ".....) end so??? |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schätzungsweise einen Leerschlag dazwischen setzen ".. ..." oder ... ausklammern "..(...)".
Allerdings bezweifle ich stark, dass man ... als String verketten kann. Höchstwahrscheinlich musst du die einzelnen Elemente aus ... herausfiltern. Dazu kannst du die Elemente in ein Array stecken "{ ... }" und dieses mit den Standardmethoden für Arrays durchiterieren. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
TheGamePope |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich bins nochmal. Ich hab ein groses problem beim debuggen.
Jedesmal wenn ich einen fehler habe, kriege ich anstadt einer meldung eine memory acces violation. Kann mir da jemand helfen??? |
||
super_castle |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo , wenn ich 2 Programme starte exe1 und exe2 von B3D , können die mit Lua dann miteinander kommunizieren?
Gruss |
||
Gehe zu Seite Zurück 1, 2, 3 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group