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


Anmelden zum Antworten