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 SetWindowHookEx und die inkompatiblen Typen (https://www.delphipraxis.net/176322-setwindowhookex-und-die-inkompatiblen-typen.html)

Codehunter 27. Aug 2013 12:37

SetWindowHookEx und die inkompatiblen Typen
 
Hallo!

Es ist zum Haare raufen wenn man versucht alten Code nach XE4 zu portieren. Im Moment kämpfe ich mit SetWindowHookEx:
Delphi-Quellcode:
function MessageHookProc(Code: Integer; wParam: Integer; lParam: Integer): Integer; stdcall;
{...}

SetWindowsHookEx(WH_GETMESSAGE, MessageHookProc, 0, GetCurrentThreadID);
In Zeile 2 bei GetMessageHook ziehts dem Compiler die Socken aus:
Zitat:

Inkompatible Typen: 'NativeInt' und 'Integer'
Feine Sache das, also ändere ich mal fix die erste Zeile in:
Delphi-Quellcode:
function MessageHookProc(Code: Integer; wParam: Integer; lParam: Integer): NativeInt; stdcall;
{...}
meckert der Compiler daraufhin:
Zitat:

Inkompatible Typen: 'NativeUInt' und 'Integer'
Na gut, dann eben NativeUInt:
Delphi-Quellcode:
function MessageHookProc(Code: Integer; wParam: Integer; lParam: Integer): NativeUInt; stdcall;
{...}
Was der Compiler freundlicherweise mit
Zitat:

Inkompatible Typen: 'NativeInt' und 'NativeUInt'
quittiert. Der benimmt sich wie ein kleines Kind: Weiß genau was er nicht will aber hat keine Ahnung was er will ;-)

So und nu? Ich hab nen Filmriss...

Grüße
Cody

DeddyH 27. Aug 2013 13:13

AW: SetWindowHookEx und die inkompatiblen Typen
 
Meckert er vielleicht die Parameter an?

[edit] So evtl?
Delphi-Quellcode:
function MessageHookProc(Code: NativeInt; wParam: wParam; lParam: lParam): LResult; stdcall;
[/edit]

Codehunter 27. Aug 2013 13:23

AW: SetWindowHookEx und die inkompatiblen Typen
 
Ging mir auch schon durch den Kopf, aber nein auch mit deinem Code gibts
Zitat:

Inkompatible Typen: 'Integer' und 'NativeInt'
Ich hab so das unbestimmte Gefühl, der springt da zwischen verschiedenen Overloads hin und her. Ich kann aber nicht mit dem Finger drauf zeigen weil in der IDE beim STRG-Klick auf den Function-Namen immer die selbe Stelle in der Windows.pas angesprungen wird.

EDIT: Oh, neuer Ärger im Paradies... Ich habe mal die Deklaration von TFNHookProc herangezogen:
Delphi-Quellcode:
function MessageHookProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT;
{...}
Und da bekomme ich eine ganz neue Meldung:
Zitat:

Inkompatible Typen: 'Unterschiede in der Aufrufkonvention'
Nochn EDIT: Ein Rindvieh braucht mehr Kaffee... "stdcall" vergessen zu kopieren. Und siehe da, es geht :-)

DeddyH 27. Aug 2013 13:32

AW: SetWindowHookEx und die inkompatiblen Typen
 
Da fehlt auch das stdcall.

[edit] So müsste es dann aber stimmen:
Delphi-Quellcode:
function MessageHookProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;
Das war auch mein Fehler oben, int entspricht ja AFAIK Integer (also immer 32 Bit). [/edit]


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