AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein FreePascal Parameter von Host App in DLL freigeben?
Thema durchsuchen
Ansicht
Themen-Optionen

Parameter von Host App in DLL freigeben?

Ein Thema von Yakumo500 · begonnen am 26. Nov 2012 · letzter Beitrag vom 27. Nov 2012
Antwort Antwort
Yakumo500

Registriert seit: 15. Nov 2008
Ort: Darmstadt
106 Beiträge
 
#1

Parameter von Host App in DLL freigeben?

  Alt 26. Nov 2012, 18:59
Hi,
ich schreibe grade eine Bibliothek in FreePascal. Bisher habe ich immer alle von der Anwendung übergebenen Parameter - falls sie Pointer benutzen - in der Bibliothek freigegeben. Das hat auch geklappt. Aber eigentlich benutzen ja die Anwendung und die Bibliothek nicht den gleichen Speicher. Entstehen dabei Memory Leaks? Und wie kann die Bibliothek überhaupt Speicher von der Host App freigeben?

Als Beispiel:

Bibliothek:
Delphi-Quellcode:
procedure Test(a: PAnsiChar);
begin
  // Mache was mit Parameter
  StrDispose(a);
end;

// ...
exports
  Test;
Host App:
Delphi-Quellcode:
var str: PAnsiChar;

begin
  // Erstelle PAnsiChar
  str := StrNew('Hallo!');
  Test(str);
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Parameter von Host App in DLL freigeben?

  Alt 26. Nov 2012, 21:55
Gib den Speicher da frei, wo du ihn auch angefordert hast. Und ja, so wie du es machst sollten Speicherlecks entstehen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Yakumo500

Registriert seit: 15. Nov 2008
Ort: Darmstadt
106 Beiträge
 
#3

AW: Parameter von Host App in DLL freigeben?

  Alt 27. Nov 2012, 10:47
Ok aber wenn ich ein Interface übergebe dürfte kein Speicherleck entstehen, oder?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Parameter von Host App in DLL freigeben?

  Alt 27. Nov 2012, 11:14
Also erstmal verwenden EXE und DLL immer den gleichen Speicher (außer bei Out-Of-Process-Servern, wo die DLL stattdessen in einem anderem Prozecc geladen wird).

Aber die Verwaltung des Speichers geschieht in mehreren, unterschiedlichen und vorallem unabhängigen Speichermanagern, abgesehn von Shared-Memory, wo sich zwei/mehrere Speichermanager verbinden und gemeinsam arbeiten.


Windows bietet über VirtualAlloc nunmal keine "schöne" (klein skalierbare) und schnelle Möglichkeit an, weswegen da nochmal eine eigene Verwaltung zwischengeschaltet wurde.
(DelphiMM, FastMM usw. ... k.A. was FPC/Lazarus standardmäßig drin hat)

Und jeder Speichermanager kann natürlich nur den von ihm verwalteten Speicher freigeben.


Also entweder Shared, oder man muß dort freigeben, wo man reserviert, wobei man das immer machen sollte, um den Überlick zu behalten.

Du kannst aber gerne eine GibSpeicherFrei-Methode in deine Schnittstelle einbauen und der den Pointer/Speicher mitgeben.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Yakumo500

Registriert seit: 15. Nov 2008
Ort: Darmstadt
106 Beiträge
 
#5

AW: Parameter von Host App in DLL freigeben?

  Alt 27. Nov 2012, 20:34
Danke ich seh jetzt ein bisschen klarer. Habe es jetzt so gemacht, dass die Anwendung direkt Methoden der Bibliothek aufruft mit in der Anwendung allozierten Daten und danach die Anwendung die Daten wieder freigibt. In der Bibliothek werden die Daten einfach neu angelegt.
Hast du einen Tipp wo ich einen Artikel zum Speichermanagement finden kann?
  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 12:37 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