Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi Lua und Delphi (Teil 1) (https://www.delphipraxis.net/76737-lua-und-delphi-teil-1-a.html)

igel457 8. Sep 2006 21:06


Lua und Delphi (Teil 1)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Lua und Delphi
Funktionen von Delphi nach Lua

Hallo,

Ich habe mal ein kleines Tutorial geschrieben, in dem es um die Verwendung von Lua mit Delphi geht.
In diesem Teil geht es darum, Lua mit Delphi zu verbinden und Delphi Funktionen aus Lua heraus aufzurufen.

[edit=JasonDX] *snip* - Link auf Wunsch des Autors entfernt, das Tutorial befindet sich nun im Anhang[/edit]

Um Rückmeldung wäre ich euch sehr verbunden, da es mein erstes Tutorial ist.

In den nächsten Teilen wird es darum gehen Lua Funktionen aus Delphi heraus aufzurufen und Objekte zwischen Lua und Delphi auszutauschen.

Viel Spaß damit wünscht euch,
Igel457

PS: Mehr Infos über Lua gibt es unter http://www.lua.org

mschaefer 8. Sep 2006 21:58

Re: Lua und Delphi (Teil 1)
 
Moin, Spätmoin,

Scriptsprachen in Delphi sind ein interessantes Thema. Dein Tutorial finde ich gut gemacht.
Kenne Lua nun überhaupt nicht. Richtig spannend finde ich wird es, wenn ich ein Memo mit dem Programm habe und dies dann ändern und laufen lassen kann. Vielleicht könntest Du ein Demoprojekt mit Source in den Anhang stellen. Ein großer Vorteil scheint hier doch zu sein, dass nicht mit ActiveX-Komponenten, sondern nur mit einer dll, die im Anwendungsverzeichnis liegt, gearbeitet wird. Und wenn man die dynamisch lädt, kann man auch noch ihre relative Lage zur Exe bestimmen.

Find ich gut! Grüße // Martin

igel457 9. Sep 2006 10:52

Re: Lua und Delphi (Teil 1)
 
Zitat:

Zitat von mschaefer
Moin, Spätmoin,

Scriptsprachen in Delphi sind ein interessantes Thema. Dein Tutorial finde ich gut gemacht.
Kenne Lua nun überhaupt nicht. Richtig spannend finde ich wird es, wenn ich ein Memo mit dem Programm habe und dies dann ändern und laufen lassen kann. Vielleicht könntest Du ein Demoprojekt mit Source in den Anhang stellen. Ein großer Vorteil scheint hier doch zu sein, dass nicht mit ActiveX-Komponenten, sondern nur mit einer dll, die im Anwendungsverzeichnis liegt, gearbeitet wird. Und wenn man die dynamisch lädt, kann man auch noch ihre relative Lage zur Exe bestimmen.

Find ich gut! Grüße // Martin

Danke für die Rückmeldung! Die Beispielprogramme werde ich noch hochladen, das ist kein Problem.
Das mit dem Memo ist vieleicht auch git für ein Beispiel mit Objekten, mal schaun ob ich das hinkriege.

Igel457

Vasco da Gama 8. Sep 2009 13:11

Re: Lua und Delphi (Teil 1)
 
Hallo Delphi Experten!
Ich weiß, dass dieses Thema 3 Jahre alt ist, habe aber trotzdem Fragen:

1.: Teil 1? Gibt es davon auch einen 2. Teil?

2.: Ich habe den ersten Teil des Tutorials ausprobiert und kam damit zu folgendem Code:
Delphi-Quellcode:
program LuaTest;

{$APPTYPE CONSOLE}

uses
  SysUtils, Lua;

var Lua_Instance:Lua_State;

begin
  Lua_Instance := Lua_Open();
  LuaOpen_Base(Lua_Instance);
  Lua_DoFile(Lua_Instance, 'helloworld.lua');
  ReadLn;
  Lua_Close(Lua_Instance);
  Lua_Instance := nil;
end.
Damit spuckt er aber nicht das gewünschte Ergebnis aus, sondern:

Zitat:

cannot read h: No such file or directory
Kennt jemand diesen 'Fehler'/ dieses Problem oder gar die Lösung?

mfG und Danke

Mithrandir 8. Sep 2009 13:25

Re: Lua und Delphi (Teil 1)
 
Ich kenn mich mit Lua nicht aus, vermute aber mal, dass

Delphi-Quellcode:
  Lua_DoFile(Lua_Instance, 'helloworld.lua');
die fehlerhafte Zeile ist. Schonmal mitm kompletten Pfad versucht?

Andreas L. 8. Sep 2009 13:26

Re: Lua und Delphi (Teil 1)
 
Vielleicht muss hier ein absoluter Pfad angegeben werden:
Delphi-Quellcode:
Lua_DoFile(Lua_Instance, 'helloworld.lua');

Vasco da Gama 8. Sep 2009 13:28

Re: Lua und Delphi (Teil 1)
 
Hi, ja hab ich grade versucht, dann bekomm ich bei
Delphi-Quellcode:
  Lua_DoFile(Lua_Instance, 'C:\Users\Florian\Documents\RAD Studio\Projekte\LuaTest\helloworld.lua');
Zitat:

cannot read C: No such file or directory
Trotzdem danke für die Antworten

Klaus01 8. Sep 2009 13:34

Re: Lua und Delphi (Teil 1)
 
.. sind (String) Konstanten in Delphi 2009 auch uniCode?
Könnte da das Problem liegen?

Grüße
Klaus

Vasco da Gama 8. Sep 2009 13:35

Re: Lua und Delphi (Teil 1)
 
Das weiß ich jetzt spontan nicht, doch diese Variable ist eine PWideChar, also kein String.

Chris.R 8. Sep 2009 13:47

Re: Lua und Delphi (Teil 1)
 
In den Deklarationen für die Dll ist bestimmt PChar als Parametertyp definiert, was vor Delphi 2009 PAnsiChar entsprochen hat, unter Delphi 2009 (und höher) aber PWideChar ist.
Einfach mal in der Unit in der die Funktion definiert ist, PChar durch PAnsiChar ersetzten.

Die Meldung "cannot read C: No such file or directory" kommt daher, da das erste Zeichen "C" ist, gefolgt von einem 0 Byte, da UTF-16. Und nach dem Nullbyte ist für die
Dll-Funktion der String zu Ende.

hoika 8. Sep 2009 14:08

Re: Lua und Delphi (Teil 1)
 
Hallo,

ich denke eher, der Fehler ist das Leerzeichen

Documents\RAD Studio\

Ein Leerzeichen im Pfad ...
Setze den mal in doppelte Hochkommas.

Delphi-Quellcode:
Lua_DoFile(Lua_Instance, '"C:\Users\Florian\Documents\RAD Studio\Projekte\LuaTest\helloworld.lua"');

Beim Programmieren generell keine gute Idee, das mit den Leerzeichen,
es sei denn man testet es mal mit und mal ohne.


Heiko

Vasco da Gama 8. Sep 2009 17:41

Re: Lua und Delphi (Teil 1)
 
Vielen Dank, es funktioniert mit Chris Lösung :)
:dp:

Medium 8. Sep 2009 17:52

Re: Lua und Delphi (Teil 1)
 
@Leerzeichen: Die sind nur ein Problem in der Eigenschaften-Box von Dateien - besonders EXEn die man mit Parametern versehen will, und in der Shell. Ansonsten sind die eigentlich ziemlich bedenkenlos einsetzbar mittlerweile. Zumindest hatten wir noch keinerlei Proleme damit, weder auffer Arbeit noch ich bei mir privat.

Vasco da Gama 9. Sep 2009 14:44

Re: Lua und Delphi (Teil 1)
 
Hmm. Ich hab jetzt auch mal das mit der VCL Anwendung getestet. Allerdings bekomm ich das einfach nicht hin, damit eine Delphi procedure zu starten

Nachdem mir das mit dem Dialogfeld für den Anfang mal zum Testen zu kompliziert schien, hab ich nachher noch was probiert:
Delphi-Quellcode:
unit LT;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Lua;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  LuaInstance: Lua_State;

implementation

{$R *.dfm}

function SendMessage(L:Lua_State):integer;cdecl;
var
  ArgCount:integer;
begin

  ArgCount := Lua_GetTop(L);

  if ArgCount = 1 then
  begin
    Showmessage(Lua_ToString(L,1));
  end;
  Lua_Pop(L,ArgCount);
  Result := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  LuaInstance := Lua_Open;

  Lua_PushCFunction(LuaInstance,SendMessage);
  Lua_SetGlobal(LuaInstance,'message');

  LuaOpen_Base(LuaInstance);
  Lua_DoFile(LuaInstance,'dialog.lua');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Lua_Close(LuaInstance);
  LuaInstance := nil;
end;

end.
und im Lua-Dokument:
Code:
message("test");
Leider bekomme ich auch so kein Fenster(ShowMessage) geöffnet.

Danke schonmal, mfG :dp:

PfWSkip 13. Sep 2010 11:35

AW: Lua und Delphi (Teil 1)
 
Ich weiß, der letzte Beitrag ist jetzt bereits über ein Jahr alt, aber um das Problem trotzdem zu lösen:

Zitat:

Zitat von Vasco da Gama (Beitrag 949877)
und im Lua-Dokument:
Code:
message("test");
Leider bekomme ich auch so kein Fenster(ShowMessage) geöffnet.

Der Lua-Code funktioniert wegen des semikolons ";" nicht. Lua ist zeilenbasierend (nicht wie zb. delphi) und weiß daher nichts mit einem semikolon anzufangen.
einfach nur:
Code:
message("test")

blackfin 13. Sep 2010 13:47

AW: Lua und Delphi (Teil 1)
 
Zitat:

Lua ist zeilenbasierend (nicht wie zb. delphi) und weiß daher nichts mit einem semikolon anzufangen.
Das ist nicht richtig.
Lua-Befehle können sehr wohl mit einem Semikolon abgeschlossen werden, müssen aber nicht.

Zitat:

The unit of execution of Lua is called a chunk. A chunk is simply a sequence of statements, which are executed sequentially. Each statement can be optionally followed by a semicolon
Quelle: Lua 5.1 Reference, Punkt 2.4.1

Meine Lua-Statements schliesse ich immer mit einem Semikolon ab, schon alleine wegen der Delphi-Gewohnheit :)

PfWSkip 21. Okt 2010 15:30

AW: Lua und Delphi (Teil 1)
 
Zitat:

Zitat von blackfin (Beitrag 1049270)
Das ist nicht richtig.
Lua-Befehle können sehr wohl mit einem Semikolon abgeschlossen werden, müssen aber nicht.

Naja nicht ganz falsch, zeilenbasierend ist es ja trotzdem ;)
über das semikolon war ich dann wohl falsch informiert. bis jetzt hatte ich immer nur gelesen "keine semikolons in lua".
aber gut, gefällt mir eigendlich besser so (der gewohnheit wegen ^^)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz