AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Sind diese API funktionen richtig übersetzt?
Thema durchsuchen
Ansicht
Themen-Optionen

Sind diese API funktionen richtig übersetzt?

Ein Thema von C.Schoch · begonnen am 9. Jan 2007 · letzter Beitrag vom 27. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
C.Schoch

Registriert seit: 2. Jan 2006
Ort: Wüstenrot
235 Beiträge
 
Turbo Delphi für Win32
 
#1

Sind diese API funktionen richtig übersetzt?

  Alt 9. Jan 2007, 19:14
Hi,
Ich bin mir nicht sicher ob ich diese API routinen richtig übersetzt habe.

Code:
BOOL WINAPI ShutdownBlockReasonCreate(
  HWND hWnd,
  LPCWSTR pwszReason
);
function ShutdownBlockReasonCreate(hWnd : HWND; lpText : PWideChar) : boolean;
Code:
BOOL WINAPI ShutdownBlockReasonDestroy(
  HWND hWnd
);
function ShutdownBlockReasonDestroy (hWnd : HWND) : boolean;
Code:
BOOL WINAPI ShutdownBlockReasonQuery(
  HWND hWnd,
  LPWSTR pwszBuff,
  DWORD* pcchBuff
);
function ShutdownBlockReasonQuery(hWnd : HWND; lpText : PWideChar; Buff : DWORD) : boolean; Hier noch der msdn.com Eintrag
msdn
Tschau Christian
Das System hofft auf Besserung
[Siemens]
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Sind diese API funktionen richtig übersetzt?

  Alt 9. Jan 2007, 19:26
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
  Mit Zitat antworten Zitat
C.Schoch

Registriert seit: 2. Jan 2006
Ort: Wüstenrot
235 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Sind diese API funktionen richtig übersetzt?

  Alt 9. Jan 2007, 20:14
Danke @Der Unwissende!

Denke so sollte es passen
function ShutdownBlockReasonQuery(hWnd : HWND; lpText : PWideChar; Buff : PDWORD) : BOOL;
Tschau Christian
Das System hofft auf Besserung
[Siemens]
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#4

Re: Sind diese API funktionen richtig übersetzt?

  Alt 9. Jan 2007, 20:37
Zitat von C.Schoch:
Hi,
Ich bin mir nicht sicher ob ich diese API routinen richtig übersetzt habe.

Code:
BOOL WINAPI ShutdownBlockReasonCreate(
  HWND hWnd,
  LPCWSTR pwszReason
);
Vergiss nicht WINAPI wird stdcall;

also so hier

function ShutdownBlockReasonCreate(hWnd: HWND; pwszReason: LPCWSTR): Bool; stdcall;
Programmieren ..... .
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#5

Re: Sind diese API funktionen richtig übersetzt?

  Alt 10. Jan 2007, 20:38
Zitat von C.Schoch:
function ShutdownBlockReasonQuery(hWnd : HWND; lpText : PWideChar; Buff : PDWORD) : BOOL;
Wie waere es mit
function ShutdownBlockReasonQuery(hWnd : HWND; lpText : PWideChar; var Buff : DWORD) : BOOL; stdcall; (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)^".)
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Sind diese API funktionen richtig übersetzt?

  Alt 11. Jan 2007, 04:53
Das ist in diesem Fall eher falsch. Der Name Buff deutet an das mehrere DWORDs dort stehen.
Es geht ansonsten noch eleganter:
function ShutdownBlockReasonQuery(hWnd : HWND; lpText : PWideChar; Buff : PDWORD = nil) : BOOL; Ein Defaultparameter braucht keine komischen Umtypungen.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#7

Re: Sind diese API funktionen richtig übersetzt?

  Alt 11. Jan 2007, 07:02
Zitat von Robert Marquardt:
Das ist in diesem Fall eher falsch. Der Name Buff deutet an das mehrere DWORDs dort stehen.
Wage ich anzuzweifeln, da es im Orginal heißt: "pcchBuff", was soviel bedeutet wie "Pointer auf Anzahl der Zeichen in Buff".

Nachtrag vom MSDN MSDN-Library durchsuchenShutdownBlockReasonQuery:
Zitat:
pcchBuff
[in, out] A pointer to a variable that specifies the size of the pwszBuff buffer, in bytes. If the function succeeds, this variable receives the number of characters copied into the buffer, including the null-terminating character. If the buffer is too small, the variable receives the required buffer size, in characters, not including the null-terminating character.
Noch'n Nachtrag: Man beachte (rot markiert) die Diskrepanz zwischen der Dokumentation und dem Präfix des Parameternamens (cb wäre eigentlich für die Anzahl von Bytes, cch für die Anzahl von Zeichen).
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: Sind diese API funktionen richtig übersetzt?

  Alt 11. Jan 2007, 07:13
Na das ist die inzwischen uebliche Microsoft-Schlamperei. Frueher haette der Parameter nie "Buff" geheissen.
  Mit Zitat antworten Zitat
C.Schoch

Registriert seit: 2. Jan 2006
Ort: Wüstenrot
235 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Sind diese API funktionen richtig übersetzt?

  Alt 11. Jan 2007, 18:50
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
Tschau Christian
Das System hofft auf Besserung
[Siemens]
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Sind diese API funktionen richtig übersetzt?

  Alt 27. Apr 2009, 09:00
Moin!
Zwar schon bissl älter das Tthema, aber ich hab gerade das gleiche Problem, hab folgendes drin:

Delphi-Quellcode:
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.
Die external Kommentare hatte ich anfangs anstatt stdcall, habs aber geändert da es hier so gesagt wurde.
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
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 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