CallWindowProc, #define STRICT, FARPROC
-
Hi!
Ich will CallWindowProc benutzen. Auf allen Compilern, außer BCB, funktioniert es so:
WNDPROC lpfnWndProc = NULL;
CallWindowProc(lpfnWndProc, NULL, 0, 0, 0);Ist zwar ein dummes Beispiel, aber ist ja nur der Einfachheit halber. Beim BCB krieg ich diese Fehler.
[C++ Error] Unit1.cpp(13): E2034 Cannot convert 'long (__stdcall *)(void *,unsigned int,unsigned int,long)' to 'int (__stdcall *)()'
[C++ Error] Unit1.cpp(13): E2342 Type mismatch in parameter 'lpPrevWndFunc' (wanted 'int (__stdcall *)()', got 'long (__stdcall *)(void *,unsigned int,unsigned int,long)')Ich habe herausgefunden, das es geht, wenn ich vorher #define STRICT mache, oder die Funktionszeiger auf FARPROC caste. Aber dann funktioniert es auf den anderen Compilern nicht (mit dem Cast). Soll ich #define STRICT machen? Was sind die Gründe dafür das das nur über diese Umwege geht?
-
Hab STRICT jetzt beim Präprozessor eingetragen. Halte das für die beste Lösung.
Bitte nicht mehr antworten!
:p
-
Bitte nicht mehr antworten!
werde es trotzdem tun ...
hatte dasselbe problem und ewig nach einer lösung gesucht - vc++ nimmts mit den type-cast scheinbar etwas gelassener als der bcb ...
so kann nichts schiefgehen ...
#ifdef VISUALC return CallWindowProc((WNDPROC) m_PrevProc, hwnd, msg, wParam, lParam); #else return CallWindowProc((FARPROC)m_PrevProc, hwnd, msg, wParam, lParam); #endif
so far ... rocknix
-
Hier noch weitere Infos zu STRICT, sofern es überhaupt noch jemanden interessiert:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_core_using_strict_type_checking.asp