Parameter falsch?



  • Also ich hab ne Dialogprozedur:

    BOOL CALLBACK tDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
    

    So und den Dialog ruf ich so auf:

    DialogBox (hInstance, TEXT("IDC_DIALOG"), NULL, tDlgProc);
    

    So jetzt gibt der Compiler jedoch diese Fehlermeldung aus und ich weis nicht warum:

    error C2664: 'DialogBoxParamW' : Konvertierung des Parameters 4 von 'int (void *,unsigned int,unsigned int,long)' in 'int (__stdcall *)(void)' nicht moeglich



  • Möglicherweise wird der Prototyp der DlgProc-Funktion nicht vorher definiert.

    BOOL CALLBACK t_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);



  • ::DialogBox(hInstance, _T("IDC_DIALOG"), NULL, (DLGPROC)tDlgProc);
    


  • Definiere folgendes Makro _vor_ deinen Includes.

    #define STRICT
    

    Ansonsten nimmt es die WinAPI nicht so genau mit dem Typsystem, und dir bleibt nichts anderes übrig, wie (D)Evil schon geschrieben hat, als zu casten.

    btw:
    Ein Dialog Handler hat mittlerweile folgende Signatur

    INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
    


  • ? Sry aber ich seh bei deinem "Dialog Hanlder" keinen großen Unterschied 😃

    INT_PTR sollte im mo auch als int definiert sein... genau wie BOOL 😉



  • Signed integer type for pointer precision. Use when casting a pointer to an integer to perform pointer arithmetic.
    This type is declared in BaseTsd.h as follows:

    #if defined(_WIN64) 
     typedef __int64 INT_PTR; 
    #else 
     typedef int INT_PTR;
    #endif
    

    Boolean variable (should be TRUE or FALSE).
    This type is declared in WinDef.h as follows:

    typedef int BOOL;
    

    Also irgendwie sehe _ich_ den Unterschied schon. 😉



  • Jop... unter 64bit... aber sonnst net 😃


Anmelden zum Antworten