c++ - C2440 无法在 C++ WinApi 中将 LRESULT 转换为 WNDPROC

标签 c++ windows winapi

我正在尝试使用 WinApi 编写这个 win32 程序,但我被卡住了,因为我正在学习的教程似乎有问题。

主窗口.h:

class MainWindow
{
  public:
    MainWindow(HINSTANCE);
   ~MainWindow(void);

    LRESULT CALLBACK WndProcedure(HWND, UINT, WPARAM, LPARAM);

    // [...]

主窗口.cpp:

MainWindow::MainWindow(HINSTANCE hInstance) : hwnd(0)
{
  WNDCLASSEX WndClsEx;
  // [...]
  WndClsEx.lpfnWndProc = &MainWindow::WndProcedure;
  // [...]
}

LRESULT CALLBACK MainWindow::WndProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
  // [...]
}

我一定是引用了 MainWindow::WndProcedure 错误,因为我完全按照教程中的说明遵循签名,但是构造函数中的 lpfnWndProc 行给出了编译时错误:

错误 C2440:“=”:无法从“LRESULT (__stdcall MainWindow::*)(HWND,UINT,WPARAM,LPARAM)”转换为“WNDPROC”

最佳答案

替换

LRESULT CALLBACK WndProcedure(HWND, UINT, WPARAM, LPARAM);

static LRESULT CALLBACK WndProcedure(HWND, UINT, WPARAM, LPARAM);

this 指针是函数调用中的隐藏参数,通过将其声明为静态,this 指针不再是参数,并且两个函数的签名匹配。

关于c++ - C2440 无法在 C++ WinApi 中将 LRESULT 转换为 WNDPROC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7318893/

相关文章:

c++ - 在 C++ 中读取索引调色板图像

c++ - 无限循环与 RE2::FindAndConsumeN

c++ - 使用 DevIL 从图像中检索的像素数据

c++ - 在 C++ 代码中查找类声明的正则表达式

c++ - 检测 C++ 应用程序是在 32 位还是 64 位 Windows 上运行

c++ - 获取进程句柄的详细信息

c++ - 在 Windows Mobile 中动态分配内存映射文件的大小

linux - 在家用 PC 上工作,但在不同的服务器上进行 Web 开发

c# - 使用 BluetoothLEDevice.FromIdAsync 连接到蓝牙设备会导致错误

使用 sscanf 将 char* 转换为 SYSTEMTIME