Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Zugriffverletzung beim Releasen von IShellFolder (https://www.delphipraxis.net/29024-zugriffverletzung-beim-releasen-von-ishellfolder.html)

sieppl 2. Sep 2004 21:26


Zugriffverletzung beim Releasen von IShellFolder
 
Hallo,

ich habe zig Delphi-Code-Beispiele gesehen, in denen über einen IMalloc-Pointer und der Free-Methode PIDLs freigegeben werden.
Jetzt habe ich mich mal an C++-Beispiele gehalten und auch IShellFolder und EnumLists über die eigene Methode _Release freigegeben. Das hat dann aber Zugriffsverletzungen gehagelt. Kann mir jemand den Unterschied erklären bitte?

Grüße

Sebastian

Luckie 2. Sep 2004 21:50

Re: Zugriffverletzung beim Releasen von IShellFolder
 
Zeig mal deinen Code.

Christian Seehase 2. Sep 2004 21:56

Re: Zugriffverletzung beim Releasen von IShellFolder
 
Moin Sebastian,

das Problem wird sein, dass Delphi diese Freigaben mit Release automatisch einbaut (sozusagen mittels Compiler Magic), so dass man die üblichen C/C++ Beispiele nicht 1:1 in Delphi übernehmen kann.
Dadurch, dass Du selber diese Methode noch einmal aufrufst, setzt Du den Referenzzähler für das Objekt weiter herunter, so dass es früher freigegeben wird, als vom Compiler "erwartet", und Du auf ein nicht mehr existentes Objekt zugreifst => Zugriffsverletzung.

sieppl 3. Sep 2004 00:32

Re: Zugriffverletzung beim Releasen von IShellFolder
 
danke für diese klare antwort. schade das nicht auch PIDLs vom Compiler verwaltet werden. Hier alloziiert man ja auch nicht explizit Speicher um sie zu benutzen.


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