Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   FreePascal Parameter von Host App in DLL freigeben? (https://www.delphipraxis.net/171816-parameter-von-host-app-dll-freigeben.html)

Yakumo500 26. Nov 2012 17:59

Parameter von Host App in DLL freigeben?
 
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;

Luckie 26. Nov 2012 20:55

AW: Parameter von Host App in DLL freigeben?
 
Gib den Speicher da frei, wo du ihn auch angefordert hast. Und ja, so wie du es machst sollten Speicherlecks entstehen.

Yakumo500 27. Nov 2012 09:47

AW: Parameter von Host App in DLL freigeben?
 
Ok aber wenn ich ein Interface übergebe dürfte kein Speicherleck entstehen, oder?

himitsu 27. Nov 2012 10:14

AW: Parameter von Host App in DLL freigeben?
 
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.

Yakumo500 27. Nov 2012 19:34

AW: Parameter von Host App in DLL freigeben?
 
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?


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