Metode ILanguageExceptionErrorInfo2::CapturePropagationContext (restrictederrorinfo.h)
Menangkap konteks pengecualian di seluruh batas bahasa dan di seluruh utas.
Sintaks
HRESULT CapturePropagationContext(
[in] IUnknown *languageException
);
Parameter
[in] languageException
Objek kesalahan yang tangkas apartemen, in-proc, dan marshal-by-value di seluruh proses.
Nilai kembali
Jika metode ini berhasil, metode ini mengembalikan S_OK. Jika tidak, kode kesalahan HRESULT akan dikembalikan.
Keterangan
CapturePropagationContext digunakan oleh proyeksi bahasa saat melempar ulang kesalahan. Ini termasuk ketika kesalahan diterima pada batas bahasa. Dengan demikian, menggunakan CapturePropagationContext membantu memastikan bahwa jejak belakang untuk pengecualian diambil untuk pelemparan ulang saat ini. Ini juga untuk membantu memastikan bahwa informasi penelusuran kesalahan yang relevan tidak hilang ketika pengecualian melewati batas bahasa.
Secara umum, metode ini membuat daftar objek IRestrictedErrorInfo yang ditautkan yang memberikan informasi kesalahan tambahan mengenai bagaimana pengecualian disebarluaskan. Informasi ini diekspos sebagai pengecualian yang disematkan yang direferensikan oleh rekaman pengecualian selama analisis crash dump. Dengan menggunakan daftar tertaut ini, Anda dapat mengamati jejak belakang untuk semua batas bahasa dan utas yang disebarluaskan pengecualian, termasuk dari mana kesalahan berasal.
Contoh
Contoh berikut menunjukkan proyeksi menerima kesalahan pada batas bahasanya dari proyeksi lain atau WRL. Ini adalah skenario yang ada, tetapi memungkinkan sistem untuk menangkap konteks tambahan jika proyeksi sebelumnya tidak dapat melakukannya.
HRESULT CreateFooExceptionFromLanguageBoundaryError(HRESULT errorReceived, IFooException** createdException)
{
HRESULT hr = S_OK;
ComPtr<IFooException> exception;
// Get the current error
ComPtr<IRestrictedErrorInfo> restrictedErrorInfo;
*createdException = nullptr;
if (SUCCEEDED(GetRestrictedErrorInfo(&restrictedErrorInfo)))
{
// Retrieve details regarding the error to determine if it is a stale error
// or if it is the error we received at the boundary.
BSTR description;
HRESULT errorOriginated;
BSTR restrictedDescription;
BSTR capabilitySid;
hr = restrictedErrorInfo->GetErrorDetails(
&description,
&errorOriginated,
&restrictedDescription,
&capabilitySid);
if (SUCCEEDED(hr) && errorReceived == errorOriginated)
{
hr = CreateFooException(
errorOriginated,
restrictedDescription,
restrictedErrorInfo.Get(),
&exception);
// Query for new interface to see if the new logic is there to
// capture the current propagation context.
ComPtr<ILanguageExceptionErrorInfo2> languageExceptionErrorInfo;
if (SUCCEEDED(restrictedErrorInfo.As(&languageExceptionErrorInfo)))
{
languageExceptionErrorInfo->CapturePropagationContext(nullptr);
}
*createdException = exception.Detach();
SetRestrictedErrorInfo(restrictedErrorInfo.Get());
SysFreeString(description);
SysFreeString(restrictedDescription);
SysFreeString(capabilitySid);
return hr;
}
SysFreeString(description);
SysFreeString(restrictedDescription);
SysFreeString(capabilitySid);
}
// We are here if the error didn't match or we couldn't get error details.
// So originate a new error.
// OriginateErrorInfoForThrow will call RoOriginateLanguageException, which will
// capture the context
hr = CreateFooException(errorReceived, nullptr, nullptr, &exception);
if(SUCCEEDED(hr))
{
exception->OriginateErrorInfoForThrow();
*createdException = exception.Detach();
}
return hr;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 10, versi 1703 [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2016 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | restrictederrorinfo.h |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk