我想将对象的指针作为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
的公共字符*成员):
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 [...]
}
}
知道如何从myObject
访问和修改CallbackDlgProc()
吗?
答案 0 :(得分:4)
当您将其传递给DialogBoxParam
时,您使用地址运算符&
来获取指针。但是,它已经是一个指针,因此您实际上将指针传递给指针(类型MyClass**
)。
调整回调函数中的代码,或者不使用address-of运算符。
答案 1 :(得分:0)
对于不理解上述答案的人的更详细解释,在OP的示例代码中,您必须删除"&"使它工作:
DialogBoxParam(
GetModuleHandle(NULL),
MAKEINTRESOURCE(IDD_SELECT_ETC),
hwnd,
CallbackDlgProc,
(LPARAM)myObject
);
享受。