AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Pointer auf das result einer Funktion die aus einer Dll komm
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer auf das result einer Funktion die aus einer Dll komm

Offene Frage von "bjoern"
Ein Thema von bjoern · begonnen am 28. Feb 2007 · letzter Beitrag vom 2. Mär 2007
Antwort Antwort
bjoern

Registriert seit: 27. Feb 2003
Ort: Lägerdorf
24 Beiträge
 
Delphi 7 Professional
 
#1

Pointer auf das result einer Funktion die aus einer Dll komm

  Alt 28. Feb 2007, 11:57
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
Es gibt für alles eine Lösung sie muß nur gefunden werden
  Mit Zitat antworten Zitat
bjoern

Registriert seit: 27. Feb 2003
Ort: Lägerdorf
24 Beiträge
 
Delphi 7 Professional
 
#2

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

  Alt 1. Mär 2007, 10:10
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ß
Es gibt für alles eine Lösung sie muß nur gefunden werden
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.174 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 1. Mär 2007, 10:16
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?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
bjoern

Registriert seit: 27. Feb 2003
Ort: Lägerdorf
24 Beiträge
 
Delphi 7 Professional
 
#4

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

  Alt 1. Mär 2007, 10:57
Hi,

also die Definition im Interface ist wie folgt:

Aufruf:
    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ß
Es gibt für alles eine Lösung sie muß nur gefunden werden
  Mit Zitat antworten Zitat
bjoern

Registriert seit: 27. Feb 2003
Ort: Lägerdorf
24 Beiträge
 
Delphi 7 Professional
 
#5

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

  Alt 2. Mär 2007, 10:54
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ß
Es gibt für alles eine Lösung sie muß nur gefunden werden
  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 21:56 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