none
关于WNDPROC诡异的转型问题。 RRS feed

  • 问题

  • 大家好,我遇到一个奇怪的问题:

     

    我写了一个类,下面是片段:

     

    LRESULT CALLBACK ferdin::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    

     

    同时,我在类的另一个成员函数中使用这个函数:

     

    HRESULT ferdin::InitWnd(HINSTANCE hInstance ,int ScreenWidth, int ScreenHeight, LPCSTR Title)
    {
    	WNDCLASSEX wcex;
    	wcex.cbSize = sizeof(wcex);
    	wcex.style = CS_HREDRAW | CS_VREDRAW;
    	wcex.lpfnWndProc = &Engine::WndProc;//这里使用WndProc,this->WndProc 均不行.
    

     

    编译器报错为:error C2440: 'type cast' : cannot convert from 'LRESULT (__stdcall ferdin::* )(HWND,UINT,WPARAM,LPARAM)' to 'WNDPROC'
    我发现WNDPROC的定义:
    typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
    
    CALLBACK的定义:
    #define CALLBACK __stdcall
    
    结合来看,编译器不就是说,他不能把一个类型转为他自己的类型?

     



    2011年4月20日 15:18

答案

  • 实例函数有一个隐含的this指针参数ferdin::*

    用静态的或者全局的函数。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年4月20日 16:24
    版主

全部回复

  • 实例函数有一个隐含的this指针参数ferdin::*

    用静态的或者全局的函数。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年4月20日 16:24
    版主
  • 十分感谢,醍醐灌顶~

    2011年4月21日 2:52