Lua Wrapper

Übersicht BlitzBasic DLLs und Userlibs

Gehe zu Seite Zurück  1, 2, 3  Weiter

Neue Antwort erstellen

Noobody

BeitragSo, Dez 06, 2009 0:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Dez 14, 2009 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, wollte nur anmerken, dass der Link mit den LUA-Highlite nicht mehr funzt...
[url][/url]

Noobody

BeitragMo, Dez 14, 2009 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 07, 2010 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Feb 07, 2010 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Feb 08, 2010 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Feb 08, 2010 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Feb 08, 2010 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Jop ist mir bereits bekannt Very Happy . Hab bereits bei crysis lua programmiert.
Aber ist es jetzt möglich aus dem programcode luafunktionen zu laden ohne ein externes lua script zu verwenden???

Noobody

BeitragMo, Feb 08, 2010 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das geht BlitzBasic: [AUSKLAPPEN]
Local L = luaL_newstate()

luaL_dostring( L, "function Print( ... )" + Chr( 10 ) + "CallFunction( " + Chr( 34 ) + "Print" + Chr( 34 ) + ", ... )" + Chr( 10 ) + "end" )

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

BeitragMo, Feb 08, 2010 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
thx...

Ein problem hab ich noch... Lua_DoString gibts net... Sad

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

BeitragMo, Feb 08, 2010 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, mein Fehler. Die Funktion heisst luaL_dostring Razz

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

BeitragMo, Feb 08, 2010 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Noobody hat Folgendes geschrieben:
Oh, mein Fehler. Die Funktion heisst luaL_dostring Razz

Ich habs nachkorrigiert.


Gibts bei mir noch immer nich... Vielleicht doch pushstring???

Noobody

BeitragMo, Feb 08, 2010 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
TheGamePope hat Folgendes geschrieben:
Gibts bei mir noch immer nich.

Tatsache, die Funktion habe ich nicht gewrappt Razz

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$ )
Return LuaL_LoadString( L, Script$ ) Or Lua_PCall( L, 0, LUA_MULRET, 0 )
End Function
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

BeitragMo, Feb 08, 2010 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah thx jetzt gehts danköööö
  • Zuletzt bearbeitet von TheGamePope am Di, Feb 09, 2010 15:31, insgesamt einmal bearbeitet

Holzchopf

Meisterpacker

BeitragMo, Feb 08, 2010 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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" Wink )
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 BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

TheGamePope

BeitragDi, Feb 09, 2010 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry bin neu hier. Habs jetzt geändert
 

TheGamePope

BeitragMi, Feb 10, 2010 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Feb 11, 2010 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Feb 23, 2010 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Apr 28, 2010 11:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic DLLs und Userlibs

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group