![]() |
Sind diese API funktionen richtig übersetzt?
Hi,
Ich bin mir nicht sicher ob ich diese API routinen richtig übersetzt habe.
Code:
BOOL WINAPI ShutdownBlockReasonCreate(
HWND hWnd, LPCWSTR pwszReason );
Delphi-Quellcode:
function ShutdownBlockReasonCreate(hWnd : HWND; lpText : PWideChar) : boolean;
Code:
BOOL WINAPI ShutdownBlockReasonDestroy(
HWND hWnd );
Delphi-Quellcode:
function ShutdownBlockReasonDestroy (hWnd : HWND) : boolean;
Code:
BOOL WINAPI ShutdownBlockReasonQuery(
HWND hWnd, LPWSTR pwszBuff, DWORD* pcchBuff );
Delphi-Quellcode:
Hier noch der msdn.com Eintrag
function ShutdownBlockReasonQuery(hWnd : HWND; lpText : PWideChar; Buff : DWORD) : boolean;
![]() |
Re: Sind diese API funktionen richtig übersetzt?
Hi,
nein sind sie nicht. BOOL solltest du durch LongBool ersetzen oder direkt BOOL verwenden (deklariert in der Unit Windows, ein Alias für LongBool). Das * hinter dem DWORD im ShutDownReasonQuery zeigt hier an, dass es sich um einen Zeiger handelt, pccBuff ist also ein Zeiger auf ein DWORD. Der Rest stimmt dann aber. Die Typen LPZWSTR, BOOL und DWORD findest du übrigens auch direkt für Delphi in der Unit Windows! Gruß Der Unwissende |
Re: Sind diese API funktionen richtig übersetzt?
Danke @Der Unwissende!
Denke so sollte es passen
Delphi-Quellcode:
function ShutdownBlockReasonQuery(hWnd : HWND; lpText : PWideChar; Buff : PDWORD) : BOOL;
|
Re: Sind diese API funktionen richtig übersetzt?
Zitat:
also so hier
Delphi-Quellcode:
function ShutdownBlockReasonCreate(hWnd: HWND; pwszReason: LPCWSTR): Bool; stdcall;
|
Re: Sind diese API funktionen richtig übersetzt?
Zitat:
Delphi-Quellcode:
(Nachtrag: Sorry, soll nicht heissen das andere waere inkorrekt. Aber ich habe die Erfahrung gemacht, dass es bequemer ist es so zu schreiben. Man kann dennoch NULL uebergeben wenn man es wirklich will und zwar so: "PDWORD(nil)^".)
function ShutdownBlockReasonQuery(hWnd : HWND; lpText : PWideChar; var Buff : DWORD) : BOOL; stdcall;
|
Re: Sind diese API funktionen richtig übersetzt?
Das ist in diesem Fall eher falsch. Der Name Buff deutet an das mehrere DWORDs dort stehen.
Es geht ansonsten noch eleganter:
Delphi-Quellcode:
Ein Defaultparameter braucht keine komischen Umtypungen.
function ShutdownBlockReasonQuery(hWnd : HWND; lpText : PWideChar; Buff : PDWORD = nil) : BOOL;
|
Re: Sind diese API funktionen richtig übersetzt?
Zitat:
Nachtrag vom MSDN ![]() Zitat:
|
Re: Sind diese API funktionen richtig übersetzt?
Na das ist die inzwischen uebliche Microsoft-Schlamperei. Frueher haette der Parameter nie "Buff" geheissen.
|
Re: Sind diese API funktionen richtig übersetzt?
Hi,
Hätt nie gedacht, dass es so viele Interprätationsmöglichkeiten giebt. Der var Bezeichner ist aber IMO eher "kosmetisch" ich muss halt nicht immer @DWORD schreiben |
Re: Sind diese API funktionen richtig übersetzt?
Moin!
Zwar schon bissl älter das Tthema, aber ich hab gerade das gleiche Problem, hab folgendes drin:
Delphi-Quellcode:
Die external Kommentare hatte ich anfangs anstatt stdcall, habs aber geändert da es hier so gesagt wurde.
unit UGlobal;
interface uses Windows, SysUtils; type . . . const C_MY_CONST = 1234; //external user32 name 'ShutdownBlockReasonCreate'; function ShutdownBlockReasonCreate(hWnd:HWND;pwszReason:LPCWSTR):BOOL;stdcall; //external user32 name 'ShutdownBlockReasonDestroy'; function ShutdownBlockReasonDestroy(hWnd:HWND):BOOL;stdcall; //external user32 name 'ShutdownBlockReasonQuery'; function ShutdownBlockReasonQuery(hWnd:HWND;pwszBuff:LPWSTR;pcchBuff:DWORD):BOOL;stdcall; implementation end. Das Problem jetzt ist, dass ich die Meldungen bekomme: [Fehler] UGlobal.pas(16): E2065 Ungenügende Forward- oder External-Deklaration: 'ShutdownBlockReasonCreate' [Fehler] UGlobal.pas(18): E2065 Ungenügende Forward- oder External-Deklaration: 'ShutdownBlockReasonDestroy' [Fehler] UGlobal.pas(20): E2065 Ungenügende Forward- oder External-Deklaration: 'ShutdownBlockReasonQuery' Da ich das nicht so oft mache denke ich ich hab hier einen bescheuerten Fehler drin. Ich arbeite hier unter Vista und mit Delphi 2005 Edit: ahh habs schon, die externals einfach noch hinter stdcall; dann gehts :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 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