“指向绑定函数的指针只能用于调用该函数”尝试传递类方法时出错

问题描述 投票:0回答:1

我有一个

Windows
课程如下:

struct PlatformState
{
    HINSTANCE hInstance;
    HWND WindowHandle;
};

class Win32Platform
{
public:
    Win32Platform(const char* app_name, uint32 startX, uint32 startY, uint32 width, uint32 height);
    ~Win32Platform();
private:
    PlatformState* PlatState;
    const char* AppName;
    uint32 StartPosX;
    uint32 StartPosY;
    uint32 Width;
    uint32 Height;
    LRESULT CALLBACK Win32ProcessMessage(HWND window_handle, uint32 msg, WPARAM w_param, LPARAM l_param);    
};

当我尝试创建这样的构造函数时:

Win32Platform::Win32Platform(const char* app_name, uint32 startX, uint32 startY
    , uint32 width, uint32 height)

    : AppName(app_name), StartPosX(startX), StartPosY(startY), Width(width), Height(height)
{
    PlatState = nullptr;
    PlatState = (PlatformState *)malloc(sizeof(PlatformState));
    
    PlatState->hInstance = GetModuleHandleA(0);

    //Setup and Register Window Class
    HICON icon = LoadIcon(PlatState->hInstance, IDI_APPLICATION);
    WNDCLASSA WinClass;
    WinClass.style = CS_DBLCLKS;
    WinClass.lpfnWndProc = this->Win32ProcessMessage;    
}

驱动程序代码基本上是:

Win32Platform window{"New", 100, 200, 1280, 720};

获取错误信息

指向绑定函数的指针只能用于调用该函数

我需要函数

Win32ProcessMessage
作为成员函数,因为我需要它来访问某些类实例变量。我尝试了有和没有
this

我该如何解决这个问题?

c++ winapi
1个回答
0
投票

您不能使用 non-static 类方法作为 Win32

WndProc
回调,因为它具有 API 无法解释的隐藏
this
参数。

您需要使用static类方法,或独立函数。使用

lpParam
CreateWindow/Ex()
参数将对象的
this
指针传递到回调中。

© www.soinside.com 2019 - 2024. All rights reserved.