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 MemProof - RegOpenKeyEx (https://www.delphipraxis.net/53065-memproof-regopenkeyex.html)

mumu 9. Sep 2005 12:07


MemProof - RegOpenKeyEx
 
ich habe folgende funktion:

Delphi-Quellcode:
class function TRegistryAccess.Exists(reg: TRegistry; root: HKEY; key: string; value: string; typ: TRegDataType): boolean;
begin
  Result := false;
  try
    reg.RootKey := root;
    if reg.OpenKey(key, FALSE) = true then   ////// HIER ZEIGT MEMPROOF DIE MELDUNG
    begin
      try
        if reg.ValueExists(value) then
        begin
          if typ = reg.GetDataType(value) then
          begin
            Result := true;
          end;
        end;
      finally
        reg.CloseKey;
      end;
    end;
  except
    ...
  end;
end;
memproof meldet mir immer folgendes und zeigt die oben markierte stelle an:
2 Error 00000002 0 RegOpenKeyEx(-2147483648,".wsh\PersistentHandler",0,983103,0) : Das Sy

woran kann das liegen? es ist doch eigentlich nix sonderlich im quellcode? falls jetzt reg.openkey false zurück gibt, dann muss doch auch net der key geschlossen werden, oder?

Luckie 9. Sep 2005 12:33

Re: MemProof - RegOpenKeyEx
 
Durch das
Delphi-Quellcode:
try
except
end
wird dein Objekt nur freigegeben, wenn ein Fehler, sprich eine Exception ausgelöst wird. Benutz da ein
Delphi-Quellcode:
try
finally
end

mumu 9. Sep 2005 12:35

Re: MemProof - RegOpenKeyEx
 
hmm luckie, aber welches objekt meinst du denn?
reg: TRegistry wird übergeben und eine ebene weiter oben freigegeben.

Luckie 9. Sep 2005 12:45

Re: MemProof - RegOpenKeyEx
 
Ups, ich hatte erst gedacht, du erzeugst das Objekt auch in der Funktion. Aber warum übergibst du überhaupt ein Registry Objekt? Du kannst es doch lokal erzeuigen, gucken, ob der Schlüssel existiert und dann wieder freigeben. Außerhalb der Funktion wird es doch gar nicht gebraucht.

mumu 9. Sep 2005 13:31

Re: MemProof - RegOpenKeyEx
 
naja, ich erzeuge das reg objekt einmal, weiß einmal die schlüssel usw... zu und dann kann ich jedesmal alle read-, write-funktionen usw.. aufrufen.

aber trotzdem, damit dürfte es ja gar nichts zu tun haben?!

dfried 9. Sep 2005 13:41

Re: MemProof - RegOpenKeyEx
 
Zitat:

Zitat von mumu
hmm luckie, aber welches objekt meinst du denn?
reg: TRegistry wird übergeben und eine ebene weiter oben freigegeben.

Wird es auch im Fall der Exception freigeben? (try-finally)

mumu 9. Sep 2005 14:06

Re: MemProof - RegOpenKeyEx
 
also exceptions treten keine auf...

sobald ja das openkey erfolgreich ausgeführt wurde, komm ich ja ins try ... finally vom reg.Closekey, das müsste doch passen, oder?

Basilikum 9. Sep 2005 14:19

Re: MemProof - RegOpenKeyEx
 
Zitat:

Zitat von mumu
memproof meldet mir immer folgendes und zeigt die oben markierte stelle an:
2 Error 00000002 0 RegOpenKeyEx(-2147483648,".wsh\PersistentHandler",0,983103,0) : Das Sy

damit bemängelt MemProof nicht ein Resource-Leak, sondern zeigt lediglich an, dass ein API-Aufruf mit Fehler beendet wurde... dies ist weiter nicht "tragisch"...


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