![]() |
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... |
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. |
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... |
AW: Vergangenheitswerte in DLL merken
Zitat:
|
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:
Diese Technik ist quasi die Vorstufe zu Objektorientiertem Programmieren.
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; ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 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