Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Pointer auf das result einer Funktion die aus einer Dll komm (https://www.delphipraxis.net/87410-pointer-auf-das-result-einer-funktion-die-aus-einer-dll-komm.html)

bjoern 28. Feb 2007 11:57


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

bjoern 1. Mär 2007 10:10

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ß

Bernhard Geyer 1. Mär 2007 10:16

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?

bjoern 1. Mär 2007 10:57

Re: Pointer auf das result einer Funktion die aus einer Dll
 
Hi,

also die Definition im Interface ist wie folgt:

Aufruf:
Delphi-Quellcode:
    function GetValue(Group: Integer; Element: Integer; DataType: DX_DATA_TYPE): OleVariant; safecall;
Ich habe ein Programm wo in einer Schleife 500 mal diese Funktion aufgerufen wird.
Code:

Delphi-Quellcode:
    for j:=0 to 499 do
    begin
      new(ptr);
      ptr^ := GetValue($0008,$0018,TYPE_STRING);
      Dispose(ptr);
    end;
Festgestellt habe ich es zu erst mit dem Taskmanager von Windows, dass der Prozess immer mehr Speicher belegt.

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ß

bjoern 2. Mär 2007 10:54

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