AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SetWindowHookEx und die inkompatiblen Typen
Thema durchsuchen
Ansicht
Themen-Optionen

SetWindowHookEx und die inkompatiblen Typen

Ein Thema von Codehunter · begonnen am 27. Aug 2013 · letzter Beitrag vom 27. Aug 2013
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

SetWindowHookEx und die inkompatiblen Typen

  Alt 27. Aug 2013, 13:37
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
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.620 Beiträge
 
Delphi 12 Athens
 
#2

AW: SetWindowHookEx und die inkompatiblen Typen

  Alt 27. Aug 2013, 14:13
Meckert er vielleicht die Parameter an?

[edit] So evtl?
function MessageHookProc(Code: NativeInt; wParam: wParam; lParam: lParam): LResult; stdcall; [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (27. Aug 2013 um 14:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: SetWindowHookEx und die inkompatiblen Typen

  Alt 27. Aug 2013, 14:23
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
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (27. Aug 2013 um 14:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.620 Beiträge
 
Delphi 12 Athens
 
#4

AW: SetWindowHookEx und die inkompatiblen Typen

  Alt 27. Aug 2013, 14:32
Da fehlt auch das stdcall.

[edit] So müsste es dann aber stimmen:
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (27. Aug 2013 um 14:34 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:44 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