AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vergangenheitswerte in DLL merken

Ein Thema von pinguschnitzel · begonnen am 19. Jan 2012 · letzter Beitrag vom 19. Jan 2012
Antwort Antwort
pinguschnitzel

Registriert seit: 14. Dez 2011
4 Beiträge
 
#1

Vergangenheitswerte in DLL merken

  Alt 19. Jan 2012, 12:29
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...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Vergangenheitswerte in DLL merken

  Alt 19. Jan 2012, 13:58
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.
$2B or not $2B
  Mit Zitat antworten Zitat
pinguschnitzel

Registriert seit: 14. Dez 2011
4 Beiträge
 
#3

AW: Vergangenheitswerte in DLL merken

  Alt 19. Jan 2012, 15:16
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...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Vergangenheitswerte in DLL merken

  Alt 19. Jan 2012, 15:35
Wie würde denn eine globale Variable in einer Delphi-DLL aussehen?
Google wird dir da sehr schnell weiterhelfen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: Vergangenheitswerte in DLL merken

  Alt 19. Jan 2012, 18:42
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.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 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