Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Sind diese API funktionen richtig übersetzt? (https://www.delphipraxis.net/83986-sind-diese-api-funktionen-richtig-uebersetzt.html)

nitschchedu 27. Apr 2009 18:18

Re: Sind diese API funktionen richtig übersetzt?
 
Da ich nicht mehr viel mit Delphi mache würde ich auf dem ersten Blick sagen, das
Delphi-Quellcode:
pcchBuff:DWORD
so nicht geht .... du brauchst einen verweiß auf den Speicher und nicht den Speicher selbst. Also
Delphi-Quellcode:
var
oder
Delphi-Quellcode:
PDWORD
mit anderen Worten ein Pointer.

Mfg nitsche

Christian Seehase 27. Apr 2009 18:32

Re: Sind diese API funktionen richtig übersetzt?
 
Moin Martin,

Du musst Deinem Delphi auch mitteilen, wo die Funktion zu finden ist:

Delphi-Quellcode:
function ShutdownBlockReasonQuery(const hWnd:HWND; const pwszBuff:LPWSTR; const pcchBuff:PDWORD):BOOL; stdcall; external 'user32.dll' name 'ShutdownBlockReasonQuery';
const gebe ich bei solchen Importen immer an, da die C-Funktionen keine var-Parameter kennen, und man so Funktionen erhält, bei denen man, ohne grosse Verrenkungen, auch die Beispiele verwenden kann.
Würde man hier, z.B., den letzten Parameter als var deklarieren, kann man niemals nil übergeben, was bei vielen Funktionen auch möglich ist (der letzte Parameter muss hier dann als PDWORD deklariert werden.).
Mit dem external gibt man an, in welcher DLL die Funktion zu finden ist, und mit name, wie die Funktion in der DLL heisst.
Letzteres ist hier überflüssig, da der für Delphi gewählte Funktionsname der gleiche ist, wie in der DLL, aber es gibt oft Funktionen, die als ANSI und WIDE enthalten, und mit einem A bzw. W am Ende des Namens gekennzeichnet ist.
Da man, i.d.R., nur eine der beiden Varianten benötigt, kann man die Kennung im Delphi-Funktionsnamen weglassen und bei name die gewünschte Version eintragen.
(Wichtig: Die Gross-/Kleinschreibung ist bei name exakt einzuhalten).

Dezipaitor 27. Apr 2009 20:31

Re: Sind diese API funktionen richtig übersetzt?
 
Delphi-Quellcode:
pcchBuff:PDWORD
...verwendet man, wenn nach API Spezifikation der Parameter optional (IN_OPT, OUT_OPT) ist.
Sonst muss man eine Verrenkung machen, damit nil direkt angenommen wird.

Ist nil nicht erlaubt, verwendet man:
Delphi-Quellcode:
var pcchBuff:DWORD
Da ist die (unabsichtliche, direkte) Angabe von nil schon schwieriger.


Const hat keine Auswirkung hier.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 Uhr.
Seite 2 von 2     12   

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