TaskDialogIndirect返回一个不寻常的错误代码



我使用TaskDialogIndirect向用户显示提示。通常情况下,这工作得很好,但有时,在程序运行了一段时间后,它开始返回MSDN条目中没有列出的错误代码,作为该函数可以返回的错误代码之一。

0x80040001 OLE_E_ADVF "Invalid advise flags"

我已经检查了函数的所有输入与之前在同一运行中的成功调用。除了要显示的字符串不同之外,它们是相同的。(字符串长度相同)

// create task dialog struct
TASKDIALOGCONFIG tdc;
ZeroMemory(&tdc, sizeof(TASKDIALOGCONFIG));
tdc.cbSize = sizeof(tdc);
tdc.dwFlags = (((dwMessageBoxFlags & MB_OKCANCEL) == MB_OKCANCEL) ? TDF_ALLOW_DIALOG_CANCELLATION : 0) | TDF_POSITION_RELATIVE_TO_WINDOW;
tdc.hwndParent = hwndOwner;
tdc.hInstance = LGetHInstance();
tdc.pszContent = usrText.wsz;
tdc.pButtons = _pButtons; 
tdc.cButtons = nButtons;
tdc.pszMainIcon = pszTaskDialogIcon;
tdc.pszWindowTitle = usrCaption.wsz;
tdc.nDefaultButton = nDefaultButton;
// display it now
int iButton = 0;
BOOL b = 0;
HRESULT hResult = TaskDialogIndirect(&tdc, &iButton, NULL, &b);

新信息

在TaskDialogIndirect停止正常工作的同时,ShellExecute也停止工作,CreateFile也停止工作。

这实际上是由其他地方的事件句柄泄漏引起的。当可用的句柄用完时,创建句柄所需的API调用将无法成功。但是,它们确实返回了一组相当奇怪的错误代码,其中没有一个是"out of handles"。

最新更新