Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi include in Schleife benutzen (https://www.delphipraxis.net/91810-include-schleife-benutzen.html)

Blumi 10. Mai 2007 10:46


include in Schleife benutzen
 
Hallo zusammen

Ich frage mich gerade was ich am besten brauchen kann. Ich habe Eingabefelder. Jetzt möchte ich die Werte auf unterschiedliche Art weiterverwenden.

Ich habe mir gedacht dann mache ich einfach eine Schleife und lese dann Ini-Dateien nacheinander aus, wobei jede Ini-Datei für etwas anderes zuständig ist.

Da es aber manchmal noch weitere Variablen benötigt habe ich mir gedacht dann mache ich das wie in PHP und include gleich dort wo der Code benötigt wird PAS-Dateien anstatt das mit den Ini-Dateien.

Ich weiss jetzt aber nicht wie ich das machen soll, da man die include Dateien oben auf der Seite einbindet. Ich wollte sie ja in die Schleife einbinden.

Lg , und danke für Beiträge im voraus :thumb:


ok EDIT: hab nicht gewusst das man per {$I datei.inc} auch richtig includen kann. Aber leider funktioniert das nur wenn die Datei unter C:\ abgelegt wird, oder der Pfad keine Leerzeichen enthält habe ich gerade bemerkt.

Falls jemand eine bessere Idee hat, soll sich einfach melden , danke trotzdem

cruiser 10. Mai 2007 11:05

Re: include in Schleife benutzen
 
ein include wie in php gibt es in Delphi schlicht nicht.

Was du aber machen kannst ist eine case..of Fall-Abfrage und dann entsprechende funktionen angeben.
Die können auch in verschiedenen Units liegen, welche in die Uses eingebunden werden müssen. Wenn der Aufbau ständig gleich ist, könntest du pro unit eine Funktion Exec machen, die dann etwas ausführt.

ein entsprechendes case wär etwa so (ich geh von ordinalen Konstanten aus):

Delphi-Quellcode:
case parameter of
  liesxml: liesxml.exec;
  machwas: machwas.exec;
  {...}
end;
Das käme dem angestrebten Ziel wohl am nähesten. Über Sinn und Unsinn kann man aber streiten. Ich würde sowas eher objektorientiert in Klassen packen, die ihre Funktionalität gleich mitbringen. Übrigens ab PHP5 auch da ;)

hoika 10. Mai 2007 11:05

Re: include in Schleife benutzen
 
Hallo,

PHP ist eine Interpreter,
Delphi ein Compiler.

Du kannst nicht einfach eine Pas-Datei im "laufenden Betrieb"
je nach irgendeinem gesetzten Schalter in einer Schleife includen.

Was genau willst du denn machen ?

Eine Lösung wäre die Verwendung von Pascal-Interpretern (eine Pascal Script-Komponente),
die führt zur Laufzeit Pascal-Code aus, der natürlich auch aus einer Datei geladen
werden kann.

-> google


Heiko

Blumi 11. Mai 2007 17:41

Re: include in Schleife benutzen
 
mh jetzt habe ich zuviel vorgearbeitet und gar nicht gewusst das es mit dem Include doch nicht geht.

Delphi-Quellcode:
for i := 0 to include_dateien.Count-1 do begin
eine_datei := include_dateien.Items.Strings[i];
  if include_dateien.Selected[i] then
{$I eine_datei}
end;
Ich könnte alle Aktionen schon direkt ins Delphi schreiben es wird aber einfach viel unübersichtlicher und wenn ich eine neue Aktion hinzufügen möchte muss ich wieder im Delphi bearbeiten.

Ich habe mir eben vorgestellt, wenn ich Änderungen am Programm habe kann ich die in einzelne Dateien schreiben. Die Schleife geht durch eine FileListBox, d.h. wenn neue Dateien in einen bestimmten Ordner kommen werden sie gleich bei der Schleife dazu genommen.

Aber jetzt komme ich also nicht weiter. Wäre cool wenn ihr mir helfen könntet. Es gibt bestimmt eine Möglichkeit.

edit: mir ist gerade in den Sinn gekommen. Wenn ein Programm ein Update macht, dann lädt es ja auch nur ein, bis zwei Dateien herunter und nicht nochmal die ganze EXE Datei. Und man muss ja nacher nichts kompilieren.
Von daher kann ich mir vorstellen das es sicher irgendwie geht.

mkinzler 11. Mai 2007 17:48

Re: include in Schleife benutzen
 
Du könntest Dlls/Bpls erzeugen, welche du dann dynamisch dazuladen kannst.

Blumi 11. Mai 2007 17:50

Re: include in Schleife benutzen
 
Zitat:

Zitat von mkinzler
Du könntest Dlls/Bpls erzeugen, welche du dann dynamisch dazuladen kannst.

ok. Und kann ich in dll-Dateien auch Programmcode von Delphi einfügen oder sieht das dort anderst aus?
Lg

mkinzler 11. Mai 2007 17:58

Re: include in Schleife benutzen
 
Statt ein Programm in eine Exe zu Linken erzeugst du mehrer Dlls (in delphi) und ein Hauptprogramm, welches die Dlls dynamsisch dazulinkt.

Blumi 11. Mai 2007 18:43

Re: include in Schleife benutzen
 
Zitat:

Zitat von mkinzler
Statt ein Programm in eine Exe zu Linken erzeugst du mehrer Dlls (in delphi) und ein Hauptprogramm, welches die Dlls dynamsisch dazulinkt.

Hi , danke!

Das habe ich jetzt gemacht. Aber ich wollte einfach mal das Beispiel von http://www.dsdt.info/tutorials/dlls/?page=7 testen.

Jedoch sagt er immer wenn ich die Unit2 kompilieren möchte, "Fehler beim Erzeugen von Formular ...Unit1.dfm kann nicht geöffnet....
Ich habe ja auch nur eine Unit erstellt und kein Formular, aber so ist es beschrieben.

Dann öffnet sich Unit1.pas und es kommen folgende Fehlermeldungen unten:

[Fehler] Unit1.pas(12): E2003 Undefinierter Bezeichner: 'LoadLibrary'
[Fehler] Unit1.pas(14): E2003 Undefinierter Bezeichner: 'GetProcAddress'

Die Unit 'Windows' ist aber bei Unit2 bereits drinnen???

Bitte um Hilfe. Ich wollte einfach mal ein Beispiel testen. Geht bei mir nicht :( :twisted: :evil:

:wall:

himitsu 11. Mai 2007 18:44

Re: include in Schleife benutzen
 
eine DLL ist wie 'ne EXE, nur daß diese nicht eigenständig läuft, sondern von einem Programm (meißt EXE), oder 'ner anderen DLL gelagen wird.

In der DLL sieht es fast genauso wie in der EXE aus.

Schau mal im Delphi-Beispiel-Verzeichnis (da gibt's glaub ich 'ne Demo), der OH, oder hier im Forum (hier gibt's irgendwo ein Tutorial).

[add]
das ist ja nur ein Tut zum dynamischen einbinden einer DLL/Funktion.

Wie sieht denn deine DLL und die EXE aus? (jeweils der Quellcode)


Include gibt es sozusagen auch in Delphi, allerdings nicht so wie in PHP, denn diese Dateien werden nur beim Kompilieren eingebunden.
Du kanns also Dateien einbinden, mußt aber das Programm neu Komilieren und die neue EXE ausliefern.
> [oh]{$I Datei}[/oh], oder [oh]{$Include Datei}[/oh]

Blumi 11. Mai 2007 19:25

Re: include in Schleife benutzen
 
Zitat:

Zitat von himitsu
Include gibt es sozusagen auch in Delphi, allerdings nicht so wie in PHP, denn diese Dateien werden nur beim Kompilieren eingebunden.
Du kanns also Dateien einbinden, mußt aber das Programm neu Komilieren und die neue EXE ausliefern.
> [oh]{$I Datei}[/oh], oder [oh]{$Include Datei}[/oh]

Das möchte ich ja nicht.

Und bei dem:

Zitat:

[add]
das ist ja nur ein Tut zum dynamischen einbinden einer DLL/Funktion.

Wie sieht denn deine DLL und die EXE aus? (jeweils der Quellcode)
Also ich habe noch nichts eigenees gemacht sondern einfach die dll und exe von diesem Tut genommen. Aber das geht bei mir nicht.

Die Dll sieht so aus:

Delphi-Quellcode:
library Project1;
uses
SysUtils,
Classes;
{$R *.RES}
function addiere(zahl1, zahl2: integer): integer; stdcall;
begin
result := zahl1+zahl2;
end;
exports
addiere;
begin
end.
Und die EXE sieht so aus:

Delphi-Quellcode:
unit Unit1;
interface
type
TSummenFunktion = function(zahl1, zahl2: integer): integer;
function addieren(zahl1, zahl2: integer): integer;
implementation
{$R *.DFM}
function addieren(zahl1, zahl2: integer): integer;
var SummenFunktion: TSummenFunktion;
Handle: THandle;
begin
Handle := LoadLibrary(PChar('rechnen.dll'));
if Handle <> 0 then begin
@SummenFunktion := GetProcAddress(Handle, 'addiere');
if @SummenFunktion <> nil then begin
result := addieren(12,3);
end;
FreeLibrary(Handle);
end;
end;
end.
Bei mir funktionierts jedenfalls nicht :wall: :pale:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr.
Seite 1 von 2  1 2      

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