![]() |
Pointer auf das result einer Funktion die aus einer Dll komm
Hallo zusammen,
ich habe ein Problem mit einer Dll, die ich über Axtive-X importiert habe. Die Dll hat eine Funktion von der ich ein TOleVariant zurück bekomme. Und mit jedem aufruf dieser Funktion kriege ich ein Memory-Leak. Nun hab ich gelesen das Varianten immer als Kopie im Speicher übergeben werden. Dies passt zu meiner Theroie das Speicher belegt wird aber nicht freigegeben wird. Nun meine Frage, wie bekomme ich einen Pointer auf das Result der Funktion, wodurch ich am ende diesen Speicher selbst freigebgen kann. Vielen Dank für eure Hilfe. Björn |
Re: Pointer auf das result einer Funktion die aus einer Dll
Hmm,
ist meine Frage schlecht gestellt oder habe ich eine Wichtige Info vergessen. Ich habe es mal weiter gespielt und unter VB getestet. Dort taucht das Speicherproblem nicht auf :-( Also hat es doch was mit den Delphi-Typen zu tun. Oder? Bitte um hilfe oder Ideen.... Gruß |
Re: Pointer auf das result einer Funktion die aus einer Dll
Wie ist diese Funtion (Methode da ja ein Interface ist) definiert?
Wie wird Sie aufgerufen (Beispielcode)? Wie stellst du fest das es ein Speicherleck gibt? |
Re: Pointer auf das result einer Funktion die aus einer Dll
Hi,
also die Definition im Interface ist wie folgt: Aufruf:
Delphi-Quellcode:
Ich habe ein Programm wo in einer Schleife 500 mal diese Funktion aufgerufen wird.
function GetValue(Group: Integer; Element: Integer; DataType: DX_DATA_TYPE): OleVariant; safecall;
Code:
Delphi-Quellcode:
Festgestellt habe ich es zu erst mit dem Taskmanager von Windows, dass der Prozess immer mehr Speicher belegt.
for j:=0 to 499 do
begin new(ptr); ptr^ := GetValue($0008,$0018,TYPE_STRING); Dispose(ptr); end; Danach habe ich mir mit MemProof das auch noch mal genauer verfolgt. Hab aber keine Idee was mein fehler ist. Achja hab extra ein Testprojekt gemacht. Es wird nur initalisiert, die Schleife durchlaufen und alles wieder freigegeben. Und genau in dieser Schleife Steigt der Speicher verbrauch und wird nicht freigegeben. Gruß |
Re: Pointer auf das result einer Funktion die aus einer Dll
Hallo,
so wie es aussieht kennt keiner / oder gibt es nicht die Möglichkeit von einer beliebigen Funktion sich einen Pointer vom Result zu holen. Laut Delphi-Hilfe wird bei Übergaben von Varianten Arrays immer eine Kopie im Speicher angelegt. Wie baut man denn freigaben von Varianten Array die über mehrere Funktionen gehen? Jede Funktion erzeugt ja eine Kopie im Speicher. Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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