我做了一个简单的windows api程序,它具有WinMain()和WinProc()函数,但是我收到了这个错误:
error C2440: '=' : cannot convert from 'LRESULT (__stdcall *)(HWND,UINT,LPARAM,WPARAM)' to 'WNDPROC'
1> This conversion requires a reinterpret_cast, a C-style cast or function-style cast
#include<windows.h>
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, LPARAM lParam, WPARAM wParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX WindowClass;
static LPCTSTR szAppName = L"OFWin";
HWND hWnd;
MSG msg;
WindowClass.cbSize = sizeof(WNDCLASSEX);
WindowClass.style = CS_HREDRAW | CS_VREDRAW;
WindowClass.lpfnWndProc = WindowProc; // error
....
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, LPARAM lParam, WPARAM wParam)
{ ..... }
该程序从我的书中逐字逐句地开始(ivor horton开始使用visual c ++ 2010),出了什么问题?
答案 0 :(得分:4)
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, LPARAM lParam, WPARAM wParam);
这是你的问题:LPARAM和WPARAM是向后的,它应该是:
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
WPARAM和LPARAM有两种不同的类型(分别由于历史原因而分别为UINT_PTR和INT_PTR),因此如果您不小心交换了它们,则会出现与类型相关的错误。在你的情况下这是一个幸运的事情:如果它们是相同的类型,那么代码编译错误,代码将编译正常,你会花一些时间想知道为什么你的wndproc显然混合参数传递给它!