![]() |
Externen Programmcode ausführen?
hi leutz!
eine frage, die ich zwar schon seit langem gelöst haben möchte, sie mir aber erst gerade wieder eingefalln ist :) also... wie kann ich es machen, dass z.b. eine textdatei geladen wird, diese dann eingelesen und dann als programmcode ausgeführt wird... mmhmmm... wüsste jetzt leider kein beispiel... naja... könnte mir jemand, sagen, wie ich das mache (außer mit DLLs!) und kann mir jemand evtl. gleich ein beispiel liefern (löst dann gleich mehrere fragen ;) ) THX! im Voraus! PS: wegen den DLLs... *ich check die einfach nicht* :( (kann mir ja mal jemand am rande erklären ;) ) |
Re: Externen Programmcode ausführen?
Wie meinst du das? Wenn du Code meinst, wie du ihn in Delphi schreibst (und davon gehe ich aus), wirst du einen Interpreter brauchen. Bei der JVCL ist ein recht guter dabei, schau ihn dir mal an. ;)
Wenn du nun dein Script in dem Speicher kompilieren willst, damit es wie "echter" Delphi-Code ausgeführt wird, brauchst du noch einen Runtime-Assembler (daran arbeite ich grade zufällig :angle2:). |
Re: Externen Programmcode ausführen?
Zitat:
Delphi-Quellcode:
Welches Programm soll das verstehen ???? Oder was willst du ??
Muh
kuh milka extern ... |
Re: Externen Programmcode ausführen?
na delphi :roll:
also... die txt-datei beinhaltet z.b.: procedure form1.create........ ......... ......... ........ und das soll eben dann ausgeführt werden ... |
Re: Externen Programmcode ausführen?
Ich denke Dax hat da weiter oben schon gesagt was du dazu benötigst...
MFG Florian :hi: |
Re: Externen Programmcode ausführen?
Schau dir mal PascalScript an, das gibts auf
![]() PascalScript ist eine Script-Engine, mit der Pascal-Scripts problemlos übersetzt werden, und in deinen Code zur Laufzeit eingebunden werden können. Diese Skriptsprache ähnelt Delphi sehr (is ja auch Pascal ;) ), allerdings gibt es kleine unterschiede ... ciao, Philipp |
Re: Externen Programmcode ausführen?
Zitat:
|
Re: Externen Programmcode ausführen?
Zitat:
Zitat:
MFG Florian :hi: |
Re: Externen Programmcode ausführen?
gut...
dann werd ich mir mal so nen assembler suchen... auch wenn ich keine ahnung von dem scheiss hab ;) naja... kann mir evtl. noch jemand erklären, wie DLLs funktionieren? ich hab mir schon etliche tutos runtergeladen, kapiers abba einfach nicht... das geht doch gar net! ;) |
Re: Externen Programmcode ausführen?
Ich glaube kam das es jemand schafft DLL's mal so am Rande zu erklären...
Da hilft nur noch mehr Tutorials runterladen und lesen, lesen, lesen... :zwinker: |
Re: Externen Programmcode ausführen?
oh...
meine tutos waren immer nur so... naja... am rande erklärt eben :D kann mir jemand evtl. nen link zu nem richtigen tuto posten? |
Re: Externen Programmcode ausführen?
Ich glaube du brauchst einfach das :
Buttton1.txt :
Delphi-Quellcode:
In Delphi :
Button1.Caption := 'Hallo';
Delphi-Quellcode:
Ist das gleiche wie
procedure TForm1.Button1Click(Sender : TObject);
begin {$Include Button1.txt} end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender : TObject);
begin Button1.Caption := 'Hallo'; // Die Zeile kommt eben aus der Button.txt end; |
Re: Externen Programmcode ausführen?
@Neutral General: Das problem bei deiner Methode ist, dass durch die zeile {$Include Button1.txt} die entsprechende Datei beim Kompilieren mit eingebunden wird, und somit fest im Quellcode steht. D.h. die Datei wird im kompilierten Programm nichtmehr benötigt, da sie fest eingebunden wurde, also haben änderungen in deren Code auch nach dem kompilieren auch keine Wirkung mehr.
So wie ich Master_RC aber verstanden habe, soll die Datei zur Laufzeit des Programmes eingebunden werden, und nicht vorher. Daher empfehle ich für diese Aufgabe, wie schon gesagt PascalScript. ciao, Philipp |
Re: Externen Programmcode ausführen?
Zitat:
Entweder direkt beim Programmstart oder zur Laufzeit. Z.B. ist es möglich per DLLs Plugins zu realisieren indem jede DLL die gleichen Funktionen bereitstellt (=exportiert). Eine sehr einfache DLL für einen Musikplayer könnte so aussehen:
Delphi-Quellcode:
Für MP3 müßte man die Implementierung der Play-Funktion natürlich entsprechend ändern.
library WAVPlayer;
uses SysUtils, MMSystem; {$R *.res} function Play(FileName: PChar): Boolean; stdcall; begin PlaySound(FileName, 0, SND_FILENAME); end; exports Play; end. Der Sinn hier DLLs zu verwenden ist, daß man das fertig Programm nachträglich erweitern kann. Dazu muß aber die Schnittstelle gleich bleiben, also Play-Funktion muß immer vorhanden sein und die Parameter müssen gleich bleiben. stdcall ist häufig sinnvoll da praktisch jede Programmiersprache diese Aufrufart unterstüzt. Sie ist auch die Standardaufrufsmethode für die Windows-API. DLLs funktionieren aber nicht gut wenn man Objekte "exportieren" möchte. Innerhalb einer DLL geht das aber falls z.B. wie bei Formen man auf das Application-Objekt zugreifen muß ist dies sehr schwierig. Deswegen gibt es Packages (BPLs). Die kümmern sich um die Verwaltung die bei Objekten anfällt sind aber dafür aber nur mit Delphi nutzbar und auch von der Delphi-Version abhängig. Hoffe das hilft etwas, Maël. |
Re: Externen Programmcode ausführen?
kewl, danke! :thumb:
wie ist das dann, wenn ich eine funktion ersetzen, bzw. erweitern will, also... kann ich z.b. die function doof() ersetzen/überschreiben/erweitern, wenn ich in der DLL auch eine function doof() reinbau, oder meckern delphi dann? und dann noch eine der (hoffentlich) letzten fragen: wie bau ich die DLLs dann ein? also... mit {INCLUDE doof.dll} wird sie ja komplett zur entwurfszeit mit eingebunden, abba ich brauch die ja zur laufzeit... |
Re: Externen Programmcode ausführen?
Eine DLL lädt man entweder statisch:
Delphi-Quellcode:
Oder dynamisch mit LoadLibrary. Danach muss man allerdings noch die Adresse der Funktion herausfinden mit GetProcAddress.
prcecure Play(); stdcall; external 'WAVPlayer.dll';
|
Re: Externen Programmcode ausführen?
wie ist das jetzt, wenn ich ne globale variable in der dll benutz?
kann ich die dann auch im hauptprogramm nutzen? |
Re: Externen Programmcode ausführen?
Zitat:
|
Re: Externen Programmcode ausführen?
da hab ichs damals gelernt, als ich mein erstes plugin support brauchte :P
lies mal durch, falls du die info von 'Oxmyx' mit loadlibrary() und findprocaddress() nicht sofort umzusetzen weisst. ![]() lg, beck |
Re: Externen Programmcode ausführen?
Zitat:
Delphi-Quellcode:
Und dann im Hauptprogramm:
library MyLib;
var ValueA: Integer; { ... } exports ValueA; begin end.
Delphi-Quellcode:
var
ValueA: PInteger;
Delphi-Quellcode:
ValueA := GetProcAddress(ModuleHandle, 'ValueA');
Delphi-Quellcode:
ValueA^ := 10; // einen Wert setzen
|
Re: Externen Programmcode ausführen?
mmmh.... das kapier ich auch net...
dann hab ich also in beiden fällen eine glb variable? naja, ich werds dann einfach über ne funktion machen ;) naja... eigentlich wäre dieses thema dann erledigt, falls mir nicht noch was einfällt oder ein anderer senf verlieren will :) |
Re: Externen Programmcode ausführen?
Zitat:
Ich arbeite gerade mit dynamischen BPLs und da habe ich das gleiche Problem gehabt. Gelöst habe ich das dadurch, dass ich dem Aufruf der BPL ein TBPLIN-Object mitgebe und der Aufruf liefert dem Hauptprogramm ein TBPLOUT-Objekt mit.
Delphi-Quellcode:
So kann ich die BPL einmal vom Hauptprogramm initialisieren (z.B. Datenbankconnection), mit dem TBPLOUT-Objekt kann ich in der BPL rumpspielen und die Werte stehen dem Hauptprogramm ebenfalls zur Verfügung.
Im Hauptprogramm:
myBPLOUT:=Execute(myBPLIN); // ruft dynamisch eine BPL-Datei auf Gruß Igotcha |
Re: Externen Programmcode ausführen?
@igotcha: also kann ich dann so z.b. DLLs einbinden... danke, werds mal versuchen :)
naja, eigentlich hab ichs ja bis jetzt... ich hab noch eine frage, nur die fällt mir net ein... naja, ich werd nochmal überlegen :roll: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 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