gpt4 book ai didi

windows - Windows api 程序错误 : cannot convert from 'LRESULT (__stdcall *)(HWND, UINT、LPARAM、WPARAM) 到 WNDPROC

转载 作者:可可西里 更新时间:2023-11-01 11:20:50 26 4
gpt4 key购买 nike

我已经制作了一个简单的 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)中逐字逐句提取的,有什么问题吗?

最佳答案

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 显然混淆了传递给它!

关于windows - Windows api 程序错误 : cannot convert from 'LRESULT (__stdcall *)(HWND, UINT、LPARAM、WPARAM) 到 WNDPROC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com