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 WndProc Problem (https://www.delphipraxis.net/22190-wndproc-problem.html)

TheXception 13. Mai 2004 20:11


WndProc Problem
 
Ich schreib grad eine dll für mIRC und muss aber die Messages die an mIRC gehen vorher noch auswerten. Ich hab das ganze jetzt mal so probiert:
Delphi-Quellcode:
 
...
var mIRC_oldproc: Integer;
...
function DllWndProc(mHWND: HWND; umsg: UINT; wP: WPARAM; lP:LPARAM): integer;
begin
//hier will ich auswerten
CallWindowProc(@mIRC_OldProc,mhwnd,uMsg,wP,lP);
end;


function LoadDll(...)//Funktion zum setzen der WndProc
begin
  mIRC_OLDPROC:=GetWindowLong(mwnd,GWL_WNDPROC);
  SetWindowLong(mwnd,GWL_WNDPROC,LONGINT(@DLLWndProc));
end;

procedure UnloadDll(mTimeOut: integer); stdcall; export;
begin
  SetWindowLong(Loadinfo.mHwnd,GWL_WNDPROC, LONGINT(@mIRC_OLDProc));
end;
jedoch hängt es sich dabei immer auf. kann mir jemand da weiterhelfen was ich falsch gemacht hab?

tommie-lie 13. Mai 2004 20:26

Re: WndProc Problem
 
Das Problem liegt hier:
Delphi-Quellcode:
var mIRC_oldproc: Integer;
...
CallWindowProc(@mIRC_OldProc,mhwnd,uMsg,wP,lP);
Windows will einen Pointer auf die Prozedur, was du ihm aber gibst ist ein Pointer auf einen Integer, der die Adresse der Prozedur enthält.
Mit
Delphi-Quellcode:
CallWindowProc(Pointer(mIRC_OldProc),mhwnd,uMsg,wP,lP);
Müsste's besser klappen ;-)

TheXception 14. Mai 2004 15:23

Re: WndProc Problem
 
Naja geht auf jeden fall besser jedoch läuft er immer zweimal durch die neue WndProc und fast immer beim dritten mal bleibt der debugger bei CallWindowProc mit ner Fehlermeldung hängen.

tommie-lie 15. Mai 2004 21:44

Re: WndProc Problem
 
a) Welche Fehermeldung?
b) Was sind die Parameter beim dritten Durchgang (lParam, wParam)? Was müsste die WndProc bei diesen Parametern tun? (Code, falls vorhanden).
c) wurde vielleicht irgendwo unbeabsichtigt zwischendurch die Variable mIRC_OldProc verändert?

NicoDE 15. Mai 2004 21:47

Re: WndProc Problem
 
Zitat:

Zitat von KeyCode008
Delphi-Quellcode:
function DllWndProc(mHWND: HWND; umsg: UINT; wP: WPARAM; lP:LPARAM): integer;

stdcall vergessen?

TheXception 16. Mai 2004 18:54

Re: WndProc Problem
 
Also mit dem stdcall
Delphi-Quellcode:
function DllWndProc(mHWND: HWND; umsg: UINT; wP: WPARAM; lP:LPARAM): integer; stdcall;
geht wenigstens mal der error weg.
jedoch steht nun als fenstertitel bei mIRC *Sonderzeichen*Ungültige Zeigeroperation*Sonderzeichen* und mIRC funktioniert nur noch halb.

TheXception 18. Mai 2004 11:12

Re: WndProc Problem
 
Ok hab des Problem jetzt gelöst.
Delphi-Quellcode:
function DllWndProc(mHWND: HWND; umsg: UINT; wP: WPARAM; lP:LPARAM): integer; stdcall;
begin
result:=CallWindowProc(@mIRC_OldProc,mhwnd,uMsg,wP,lP);
end;


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