将对象的指针作为参数传递给 DialogBoxParam()
Pass object's pointer as parameter to DialogBoxParam()
我想传递一个对象的指针作为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
);
。