编程时用了这么一句:DialogBox(hinstExe, MAKEINTRESOURCE(IDD_HANDSHAKE), NULL, Dlg_Proc);
然后就抱错说:g:\handshakeex\handshakeex.cpp(124) : error C2664: 'DialogBoxParamA' : cannot convert parameter 4 from 'long (struct HWND__ *,unsigned int,unsigned int,long)' to 'int (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'
我没用DialogBoxParam啊?

解决方案 »

  1.   

    注意:编译器报告的DialogBoxParamA()实际上就是DialogBox().
    它的定义如下:
    int DialogBox(
      HINSTANCE hInstance,  // handle to application instance
      LPCTSTR lpTemplate,   // identifies dialog box template
      HWND hWndParent,      // handle to owner window
      DLGPROC lpDialogFunc  // pointer to dialog box procedure
    );楼主传入的第4个参数错了,应为一个指针,指向这个消息框的窗口过程。
      

  2.   

    错误应该在于你的Dlg_Proc
      

  3.   

    确实是第四个参数错了,应该改成(DLGPROC)Dlg_Proc
    但是谁能解释一下为什么要转换一下才能用??以下是Dlg_Proc的原型
    INT_PTR WINAPI Dlg_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
      

  4.   

    DialogBox其实是调用DialogBoxParam的一个宏,C++对参数类型要求比较严格,你把Dlg_Proc声明为int __stdcall Dlg_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)就不用进行强制转换了。
      

  5.   

    那为什么我新装了一个XP的platformSDK不强制转换也编译成功了??实在是奇怪.
      

  6.   

    呵呵,不知道啊,要是到了Longhorn我们的程序能不能运行了还说不定呢!类型转换有的时候是必要的,这类似于英语中的“固定用法”哈哈