![]() |
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:
jedoch hängt es sich dabei immer auf. kann mir jemand da weiterhelfen was ich falsch gemacht hab?... 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; |
Re: WndProc Problem
Das Problem liegt hier:
Delphi-Quellcode:
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.
var mIRC_oldproc: Integer;
... CallWindowProc(@mIRC_OldProc,mhwnd,uMsg,wP,lP); Mit
Delphi-Quellcode:
Müsste's besser klappen ;-)
CallWindowProc(Pointer(mIRC_OldProc),mhwnd,uMsg,wP,lP);
|
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.
|
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? |
Re: WndProc Problem
Zitat:
|
Re: WndProc Problem
Also mit dem stdcall
Delphi-Quellcode:
geht wenigstens mal der error weg.
function DllWndProc(mHWND: HWND; umsg: UINT; wP: WPARAM; lP:LPARAM): integer; stdcall;
jedoch steht nun als fenstertitel bei mIRC *Sonderzeichen*Ungültige Zeigeroperation*Sonderzeichen* und mIRC funktioniert nur noch halb. |
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