Lua und Vb.Net

    • VB.NET

    Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

      Lua und Vb.Net

      Hallo,
      ich möchte euch heute mal zeigen wie ihr mit VB.Net Lua Scripts nutzen könnt.
      Was ist das?
      Lua ist eine einfache Scriptsprache die man mit diversen Funktionen erweitern kann (dazu später mehr)

      Was benötige ich?
      Man benötigt luanet (Download) und evtl. Kenntnisse in lua Script. Eine gute Seite zum lernen der Basics in Lua Script ist Lua für Anfänger

      Wie funktioniert es?
      Jetzt müsst ihr einfach ein Neues Projekt erstellen und die dll als Verweis hinzufügen. Imports benötigen wir keine.
      Ihr müsst gleich eine Globale Variable Namen lua deklarieren:

      VB.NET-Quellcode

      1. Private lua As New lua51()


      Jetzt müsst ihr noch eine Methode hinzufügen welche die Ausgabe beinhält:

      VB.NET-Quellcode

      1. Public Sub Output(ByVal txt As String)
      2. MessageBox.Show(txt)
      3. End Sub

      Nat. könnt ihr das ganze auch in einer ListBox o.ä. ausgeben. Aber darauf möchte ich hier nicht eingehen. Es ist denke ich logisch das txt die Ausgabe ist ;).

      So jetzt muss man noch dem Lua Interpreter mitteilen wo die Ausgabe Methode nun ist.

      VB.NET-Quellcode

      1. lua.ConnectDotNet(AddressOf Output, lua)

      Man muss als zweiten Parameter einfach die Variable lua angeben ;).

      So jetzt kann man die ganzen Funktionen erstellen und registrieren.
      Zum registrieren:
      Das ganze ist recht einfach. Man muss den Namen und die Funktion selbst angeben.

      VB.NET-Quellcode

      1. lua.RegisterFunction("say", AddressOf Say)


      Jetzt muss nat. noch die methode in VB (Say) dazukommen.
      Hier gibt es ein paar Funktionen unter lua die wichtig sind.
      Als erstes um Parameter abzurufen.
      GetParameter() - Erfordert als Parameter den Index (ACHTUNG: Der Index beginnt hier bei 1), gibt ein Object zurück
      GetParameterString() - Wie GetParameter() nur das es einen String zurückgibt.
      GetParameterNumber() - Wie GetParameter() nur das es einen Integer zurückgibt.

      ReturnString() - Erfordert als Parameter den Text der zurückgegeben werden soll.
      ReturnInt() - Erfordert als Parameter den Integer der zurückgegeben werden soll.
      ReturnDouble() - Erfordert als Parameter den Double der zurückgegeben werden soll.

      Wie ihr bestimmt schon bemerkt habt gibt es keinen Boolean. Das kann man einfach mit 0 (False) und 1 (True) lösen.

      So machen wir unsere Say Funktion:

      VB.NET-Quellcode

      1. Public Function Say() As Integer
      2. Dim txt As String = lua.GetParameter(1).ToString
      3. MessageBox.Show(txt)
      4. Return 0
      5. End Function

      Hat man eine Normale Funktion ohne Rückgabewert muss man in der VB Funktion 0 zurückgeben. Hat man allerdings einen Rückgabewert muss man 1 Zurückgeben ;).

      Nach dem wie es oben steht, sollten sich die Funktionen von selbst erklären.

      Ich liefere keinen vollständigen C&P Code, da sich das schon jeder zusammenbauen muss.

      LG, progglord

      EDIT:
      Ich habe gleichmal das wichtigste vergessen. Hier noch der Nachtrag:
      Wie führe ich den Script nun aus?
      Das ist ganz einfach. Dazu gibt es die Methode DoString(). Man übergibt einfach den Lua Script.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „progglord“ ()

      Das hier ist mein Code:


      Imports luanet
      Imports luanet.lua51

      Public Class Form1
      Private lua As New lua51()
      Private webDoc As String = ""
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      lua.ConnectDotNet(AddressOf Output, lua)
      lua.RegisterFunction("return", AddressOf Say)
      End Sub
      Public Sub Output(ByVal txt As String)
      MsgBox(txt)
      End Sub
      Public Sub Refresh()
      WebBrowser1.Refresh()
      End Sub

      Public Function Say() As Integer
      Dim txt As String = lua.GetParameter(1).ToString
      MsgBox(txt)
      Return 0
      End Function

      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      lua.DoString(TextBox1.Text)
      End Sub
      End Class

      Und der Code ist:

      return = "ddd"

      Aber nichts wird zurueckgegeben, auch kein Fehler.
      Wie siehts Stack-Technisch aus?
      Ich kenn das von den Lua Libs für C/C++ so, dass man bei Funktionsaufrufen immer Variablen vom Stack schmeißen muss, um die gleichen Parameter nicht in der nächsten Funktion o.ä. aufzurufen.
      Muss das im VB.NET Wrapper ( schätze mal, dass es einer ist.. xD) nicht gemacht werden? o:

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „martinustreveri“ ()