Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Vergangenheitswerte in DLL merken (https://www.delphipraxis.net/165865-vergangenheitswerte-dll-merken.html)

pinguschnitzel 19. Jan 2012 11:29

Vergangenheitswerte in DLL merken
 
Moinsen!

Ich kämpfe immernoch mit Borland Delphi Dlls die ich in Lahey Fortran einbinden will...
Inzwischen kann ich die DLL auch aufrufen - und bekomme auch Werte zurück, allerdings merkt sich die DLL bei einem erneuten call aus Fortran seine alten Werte nicht.

Gibt es in Delphi eine Möglichkeit Variablen so zu deklarieren, dass die DLL sich die Variablen aus vorherigen calls merkt (bsp. in ein array)?

Wär klasse, wenn jmd nen Ansatz posten könnte...

himitsu 19. Jan 2012 12:58

AW: Vergangenheitswerte in DLL merken
 
Lokale Funktions-Variablen werden sowieso nie gemerkt gespeichert, über zwei Aufrufe hinweg.

Eine böse globale Variable würde den Wert behalten, aber nur solande die DLL nicht entladen (neu geladen) wird.

Ansonsten wirt du diesen wert wohl extern (z.B. Datei oder Registry) speichern müssen.

pinguschnitzel 19. Jan 2012 14:16

AW: Vergangenheitswerte in DLL merken
 
Danke für die schnelle Antwort!

Ich bin (leider) kein Delphi-Programmierer...
Wie würde denn eine globale Variable in einer Delphi-DLL aussehen?
Über den Input/Output sämtlicher Werte habe ich auch schon nachgedacht... aber dann wäre die Performence der DLL am A***

Zum Verständnix einer Delphi-DLL:
Kann sich eine Delphi-DLL generell keine Werte "merken" oder nur wenn sie statisch geladen wird (was bei mir in Fortran der Fall ist). Sprich: Sie wird mit Hilfe einer LIB-Datei global mit dem Hauptprogramm verlinkt mit diesem zusammen aufgerufen. Würde es helfen die DLL dynamisch zu verlinken...

Luckie 19. Jan 2012 14:35

AW: Vergangenheitswerte in DLL merken
 
Zitat:

Zitat von pinguschnitzel (Beitrag 1146704)
Wie würde denn eine globale Variable in einer Delphi-DLL aussehen?

Google wird dir da sehr schnell weiterhelfen.

shmia 19. Jan 2012 17:42

AW: Vergangenheitswerte in DLL merken
 
Es ist üblich, dass man eine Datenstruktur (ein Record in Delphi) definiert,
die sowohl der DLL als auch dem Aufrufer (Lahey Fortran) bekannt ist.

Jede DLL-Funktion bekommt als 1. Parameter diese Datenstruktur übergeben.
Der Aufrufer ist dafür verantwortlich, für die Datenstruktur den Speicher zu reservieren
und der Aufrufer gibt den Speicher auch wieder frei.

Hier ist ein fiktives Beispiel, wie so etwas aussehen kann:
Delphi-Quellcode:
TContext = record
  xpos_min:double;
  ypos_min:double;
  interations : integer;
  ...
end;

procedure InitializeContext(var context:TContext); // sichere Anfangswerte setzen
function CalculateArea(var context:TContext; mode:integer):double;
...
Diese Technik ist quasi die Vorstufe zu Objektorientiertem Programmieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 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