AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Pointer-Fragen/PItemIDList Pointer richtig freigeben
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer-Fragen/PItemIDList Pointer richtig freigeben

Ein Thema von sieppl · begonnen am 26. Sep 2004 · letzter Beitrag vom 26. Sep 2004
Antwort Antwort
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#1

Pointer-Fragen/PItemIDList Pointer richtig freigeben

  Alt 26. Sep 2004, 16:19
Hallo,

sehe ich das richtig, wenn ich z.B. hier:

 while (PEnumList.Next(1, PIDL, NumIDs) <> S_FALSE) immer die selbe PIDL benutze, dass bei einem 'Next' nur der Zeiger umgebogen wird
und ich demnach in jedem Next-Schritt die PIDL komplett 'disposen' muss?
Es reicht also nicht am Ende des while-Durchlaufes die PIDL freizugeben??

Variablen die Speicher allozieren liegen doch nicht auf im Stack und müssen
doch explizit freigegeben werden auch wenn sie innerhalb einer Funktion benutzt
werden, oder?

Grüße

Sebastian
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#2

Re: Pointer-Fragen/PItemIDList Pointer richtig freigeben

  Alt 26. Sep 2004, 16:31
Zitat von sieppl:
dass bei einem 'Next' nur der Zeiger umgebogen wird
und ich demnach in jedem Next-Schritt die PIDL komplett 'disposen' muss?
Es reicht also nicht am Ende des while-Durchlaufes die PIDL freizugeben??
Richtig:
Zitat von MSDN Library:
Retrieves the specified number of item identifiers in the enumeration sequence and advances the current position by the number of items retrieved.

[...]

The implementation must allocate these item identifiers using the Shell's allocator (retrieved by the SHGetMalloc function). The calling application is responsible for freeing the item identifiers using the Shell's allocator.
Zitat von sieppl:
Variablen die Speicher allozieren liegen doch nicht auf im Stack und müssen
doch explizit freigegeben werden auch wenn sie innerhalb einer Funktion benutzt
werden, oder?
Auch richtig. Hier musst du allerdings nicht normal Speicher freigeben, sondern über IMalloc; der Speicher ist in diesem Falle noch nicht einmal auf dem Heap deiner Applikation (es sei denn, du hast das COM-Objekt aus einem Local Server).
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#3

Re: Pointer-Fragen/PItemIDList Pointer richtig freigeben

  Alt 26. Sep 2004, 16:46
Zitat von d3g:
Zitat von sieppl:
dass bei einem 'Next' nur der Zeiger umgebogen wird
und ich demnach in jedem Next-Schritt die PIDL komplett 'disposen' muss?
Es reicht also nicht am Ende des while-Durchlaufes die PIDL freizugeben??
Richtig:
Zitat von MSDN Library:
Retrieves the specified number of item identifiers in the enumeration sequence and advances the current position by the number of items retrieved.

[...]

The implementation must allocate these item identifiers using the Shell's allocator (retrieved by the SHGetMalloc function). The calling application is responsible for freeing the item identifiers using the Shell's allocator.
Danke für deine Bestätigung. Ich kann aus dem MSDN-Text aber nicht entnehmen, dass die die PIDL bei Next nur umgebogen wird. Ist klar, dass man sich um die Freigabe kümmern sollte, aber Next könnte genauso gut die Freigabe übernehmen, falls die PIDL <> nil ist. Das wollte ich nur klären..

Grüße

Sebastian
Sebastian
  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 10:40 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