![]() |
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 ![]() |
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 |
Re: Lua und Delphi (Teil 1)
Zitat:
Das mit dem Memo ist vieleicht auch git für ein Beispiel mit Objekten, mal schaun ob ich das hinkriege. Igel457 |
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:
Damit spuckt er aber nicht das gewünschte Ergebnis aus, sondern:
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. Zitat:
mfG und Danke |
Re: Lua und Delphi (Teil 1)
Ich kenn mich mit Lua nicht aus, vermute aber mal, dass
Delphi-Quellcode:
die fehlerhafte Zeile ist. Schonmal mitm kompletten Pfad versucht?
Lua_DoFile(Lua_Instance, 'helloworld.lua');
|
Re: Lua und Delphi (Teil 1)
Vielleicht muss hier ein absoluter Pfad angegeben werden:
Delphi-Quellcode:
Lua_DoFile(Lua_Instance, 'helloworld.lua');
|
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:
|
Re: Lua und Delphi (Teil 1)
.. sind (String) Konstanten in Delphi 2009 auch uniCode?
Könnte da das Problem liegen? Grüße Klaus |
Re: Lua und Delphi (Teil 1)
Das weiß ich jetzt spontan nicht, doch diese Variable ist eine PWideChar, also kein String.
|
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. |
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 |
Re: Lua und Delphi (Teil 1)
Vielen Dank, es funktioniert mit Chris Lösung :)
:dp: |
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.
|
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:
und im Lua-Dokument:
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.
Code:
Leider bekomme ich auch so kein Fenster(ShowMessage) geöffnet.
message("test");
Danke schonmal, mfG :dp: |
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:
einfach nur:
Code:
message("test")
|
AW: Lua und Delphi (Teil 1)
Zitat:
Lua-Befehle können sehr wohl mit einem Semikolon abgeschlossen werden, müssen aber nicht. Zitat:
![]() Meine Lua-Statements schliesse ich immer mit einem Semikolon ab, schon alleine wegen der Delphi-Gewohnheit :) |
AW: Lua und Delphi (Teil 1)
Zitat:
ü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 21:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz