Я использую Automation для управления программой MS Office.
Подключите, если запущена программа Office, или запустите новый Office в фоновом режиме, если это не так.
Однако очень редко, когда Office входит в процедуру завершения работы, при одновременном вызове Invoke () возникает ошибка Windows Runtime.
BOOL SetValue(IDispatch *pDispatch, LPOLESTR lpOleStr, DISPPARAMS params)
{
if (pDispatch != NULL && lpOleStr != NULL)
{
DISPID dispID;
HRESULT hr = pDispatch->GetIDsOfNames(IID_NULL, &lpOleStr, 1, LOCALE_SYSTEM_DEFAULT, &dispID);
if (SUCCEEDED(hr))
{
hr = pDispatch->***Invoke***(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT, ¶ms, NULL, NULL, NULL);
if (SUCCEEDED(hr))
{
return TRUE;
}
}
}
return FALSE;
}
Я использовал IsBadReadPtr (), VirtualQuery () для проверки правильности указатель IDispatch и попытка исключения ~ не перехвачены.
Есть ли способ проверить, действителен ли указатель IDispatch? Или есть способ узнать, закрывается ли программа Office?