Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler bei Headerübersetzung? (https://www.delphipraxis.net/25104-fehler-bei-headeruebersetzung.html)

SleepyMaster 1. Jul 2004 08:51


Fehler bei Headerübersetzung?
 
Ist das tatsächlich falsch übersetzt oder wie ist das?

Zitat:

Zitat von MSDN
LONG RegConnectRegistry(
LPCTSTR lpMachineName,
HKEY hKey,
PHKEY phkResult
);

Zitat:

Zitat von Windows.pas
function RegConnectRegistry(lpMachineName: PChar; hKey: HKEY;
var phkResult: HKEY): Longint; stdcall;


Delphi-Quellcode:
PHKEY = ^HKEY;

SleepyMaster 1. Jul 2004 09:01

Re: Fehler bei Headerübersetzung?
 
Ich glaub ich bin jetzt drauf gekommmen:

Das var in der Delphi übersetzung macht aus dem HKEY ein PHKEY, damit es als Variable und nicht nur als Konstante weitergegeben werden kann.

MathiasSimmack 1. Jul 2004 09:39

Re: Fehler bei Headerübersetzung?
 
Nein, var bedeutet, du musst zwingend eine Variable benutzen. In dem Fall macht das auch Sinn, weil du das Handle des geöffneten Registryschlüssels zurückbekommst und damit dann weiter arbeiten kannst:
Delphi-Quellcode:
if(RegConnectRegistry('\\Computername',HKEY_LOCAL_MACHINE,
  regKey) = ERROR_SUCCESS) then
try
  // wenn du Glück hast, kannst du nun hier
  // über das "regKey"-Handle Werte auslesen,
  // usw.
finally
  RegCloseKey(regKey);
end;
Bei der Originaldeklaration von Microsoft übergibst du die Variable "regKey" in dem Fall nicht als HKEY-Variable, sondern als Zeiger (deswegen ja auch PHKEY). Theoretisch könntest du daher auch nil angeben, nur wird das in dem speziellen Fall wohl keiner machen. ;)

Aber es gäbe andere Beispiele, in denen ein Zeiger durchaus sinnvoller ist.

w3seek 1. Jul 2004 10:07

Re: Fehler bei Headerübersetzung?
 
Zitat:

Zitat von SleepyMaster
Das var in der Delphi übersetzung macht aus dem HKEY ein PHKEY

Das ist korrekt, intern pusht delphi die referenz zu der variable auf den stack.

Zitat:

Zitat von SleepyMaster
... , damit es als Variable und nicht nur als Konstante weitergegeben werden kann.

dies ist fast korrekt. Man will dabei verhindern dass man die die referenz auf eine konstante uebergibt da diese funktion in diesen speicher schreiben wuerde. Somit zwingt einen Delphi, eine Variable zu uebergeben

Christian Seehase 1. Jul 2004 12:27

Re: Fehler bei Headerübersetzung?
 
Moin Zusammen,

Zitat:

Zitat von w3seek
Somit zwingt einen Delphi, eine Variable zu uebergeben

was überflüssig wäre, wenn man, wie von MS vorgesehen, wirklich einen Pointer übergeben würde.

Durch die Verwendung von var Parametern an solchen Stellen, kommen dann ja auch diese "netten" Eigenarten zu Stande, dass man sich Funktionen noch einmal selbst importieren muss, wenn man sie wie vorgesehen benutzen will, z.B. ExtractIconEx.
In dem Falle gibt es sogar einen FAQ Artikel bei Borland, der das entsprechend vorsieht.


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