SetErrorInfo-Funktion (oleauto.h)
Legt das Fehlerinformationsobjekt für den aktuellen logischen Ausführungsthread fest.
Syntax
HRESULT SetErrorInfo(
[in] ULONG dwReserved,
[in, optional] IErrorInfo *perrinfo
);
Parameter
[in] dwReserved
Für die zukünftige Verwendung reserviert. Muss Null sein.
[in, optional] perrinfo
Ein Fehlerobjekt.
Rückgabewert
Wenn diese Funktion erfolgreich ist, gibt sie S_OK zurück. Andernfalls wird ein Fehlercode HRESULT zurückgegeben.
Hinweise
Diese Funktion gibt das vorhandene Fehlerinformationsobjekt frei, sofern vorhanden, und legt den Zeiger auf perrinfo fest. Verwenden Sie diese Funktion nach dem Erstellen eines Fehlerobjekts, das das Objekt dem aktuellen logischen Ausführungsthread ordnet.
Wenn die Eigenschaft oder Methode, die SetErrorInfo aufruft, von DispInvoke aufgerufen wird, füllt DispInvoke den EXCEPINFO-Parameter mit den im Fehlerinformationsobjekt angegebenen Werten aus. DispInvoke gibt DISP_E_EXCEPTION zurück, wenn die Eigenschaft oder Methode einen Fehlerrückgabewert für DispInvoke zurückgibt.
VTBL-Bindungscontroller (Virtual Function Table), die IDispatch::Invoke nicht verwenden, können das Fehlerinformationsobjekt mithilfe von GetErrorInfo abrufen. Dadurch kann ein Objekt, das eine duale Schnittstelle unterstützt, SetErrorInfo verwenden, unabhängig davon, ob der Client die VTBL-Bindung oder IDispatch verwendet.
Wenn ein apartmentübergreifender Aufruf erfolgt, löscht COM jedes Fehlerobjekt.
Durch einen COM-Aufruf, der einen Proxy-Stub durchläuft, wird jedes vorhandene Fehlerobjekt für den aufrufenden Thread gelöscht. Ein aufgerufenes Objekt sollte nach dem Aufrufen von SetErrorInfo und vor der Rückgabe keine derartigen Aufrufe ausführen. Der Aufrufer sollte keine derartigen Aufrufe tätigen, nachdem der Aufruf zurückgegeben wird und bevor GetErrorInfo aufgerufen wird. Als Faustregel gilt, dass eine Schnittstellenmethode so schnell wie möglich nach dem Aufruf von SetErrorInfo zurückgegeben wird, und der Aufrufer sollte GetErrorInfo so schnell wie möglich aufrufen, nachdem der Aufruf zurückgegeben wurde.
Wenn Sie die modale COM-Nachrichtenschleife eingeben, werden alle vorhandenen Fehlerobjekte gelöscht. Ein aufgerufenes Objekt sollte nach dem Aufruf von SetErrorInfo nicht in eine Nachrichtenschleife gelangen.
Beispiele
ICreateErrorInfo *pcerrinfo;
IErrorInfo *perrinfo;
HRESULT hr;
hr = CreateErrorInfo(&pcerrinfo);
if (SUCCEEDED(hr))
{
hr = pcerrinfo->QueryInterface(IID_IErrorInfo, (LPVOID FAR*) &perrinfo);
if (SUCCEEDED(hr))
{
SetErrorInfo(0, perrinfo);
perrinfo->Release();
}
pcerrinfo->Release();
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Windows |
Kopfzeile | oleauto.h |
Bibliothek | OleAut32.lib |
DLL | OleAut32.dll |