将对象的指针作为参数传递给 DialogBoxParam()

Pass object's pointer as parameter to DialogBoxParam()

本文关键字:DialogBoxParam 参数传递 对象 指针      更新时间:2023-10-16

我想传递一个对象的指针作为DialogBoxParam()的第五个参数。

INT_PTR WINAPI DialogBoxParam(
  _In_opt_  HINSTANCE hInstance,
  _In_      LPCTSTR lpTemplateName,
  _In_opt_  HWND hWndParent,
  _In_opt_  DLGPROC lpDialogFunc,
  _In_      LPARAM dwInitParam
);


这是我打给DialogBoxParam()的电话:

MyClass *myObject = new MyClass();
DialogBoxParam(
    GetModuleHandle(NULL),
    MAKEINTRESOURCE(IDD_SELECT_ETC),
    hwnd,
    CallbackDlgProc,
    (LPARAM)&myObject
);

这是我在CallbackDlgProc()中的一个尝试(知道myFile是myObject的公共char*成员):

BOOL CALLBACK CallbackDlgProc(HWND hwndDlg, UINT Message, WPARAM wParam, LPARAM lParam)
{
    switch(Message)
    {
        case WM_INITDIALOG:
        {
            MessageBox(NULL, (CHAR*)((*(MyClass*)lParam).myFile), "Title", MB_OK);
            return TRUE;
        }
        case [...]
    }
}


如何从CallbackDlgProc()访问和编辑myObject ?

当您将其传递给DialogBoxParam时,您使用&的地址操作符来获取指针。然而,它已经是一个指针,所以你实际上传递一个指针给一个指针(类型MyClass**)。

为它调整回调函数中的代码,或者不使用地址操作符

对于不理解上述答案的人来说,一个更详细的解释,在OP的示例代码中,您必须删除"&"才能使其工作:

DialogBoxParam(
    GetModuleHandle(NULL),
    MAKEINTRESOURCE(IDD_SELECT_ETC),
    hwnd,
    CallbackDlgProc,
    (LPARAM)myObject
);