![]() |
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
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 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