这是this问题的延续。
我有以下作业:
WNDCLASSEX wndClass =
{
sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0, 0,
GetModuleHandle( NULL ), NULL, NULL, NULL, NULL,
"D3D Tutorial", NULL
};
wc = wndClass;
这给了我以下错误:
1> e:\ rat_engine \ rat_engine \ rat_engine \ rat_rendererdx9.cpp(19):错误
C2440:“正在初始化”:无法从“重载函数”转换为
“ WNDPROC”
1>范围内没有使用此名称的功能
匹配目标类型
MsgProc带下划线的原因是,它应引用以下函数:
LRESULT WINAPI RAT_RendererDX9::MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
CleanUp();
PostQuitMessage( 0 );
return 0;
case WM_PAINT:
Render();
ValidateRect( hWnd, NULL );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
在本教程中,它的工作原理是这样的,我几乎完全复制了它。那么错误是从哪里来的,我该如何解决呢?
编辑:
MsgProc的声明是:
private:
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
最佳答案
从MsgProc
的声明看来,这是一个常规成员函数,这意味着它需要一个“隐藏的” this
指针。这使其与WNDPROC不兼容,这就是编译器抱怨的原因。
尝试将其标记为static
。当然,这意味着您不能轻松访问类的非静态成员-您将需要存放实例的this
指针的副本。
您可能还需要CALLBACK
而不是WINAPI
,但是目前我无法轻松访问编译器进行验证。