使用來自託管元件的回呼
裝載元件的回呼是讓裝載能夠進行的功能。 不過,您裝載的元件可能已啟動另一個用來存取其本身外掛程式或元件的啟用內容。 在此情況下,如果裝載的元件在參考自己的 COM 物件的堆疊上留下啟用內容,裝載應用程式可能會呼叫 CoCreateInstance ,以取得預期本身實作的物件,而改為接收託管元件的物件。 為避免此啟用內容的繼承,良好的主控應用程式應該先在回呼期間啟用自己的已知啟用內容。
請考慮下列保護裝載應用程式程式碼的範例:
HRESULT STDCALL
CHostingAppFirewall::ITheInterface::FunctWrapper()
{
ULONG_PTR ulpCookie;
HRESULT hRes = E_FAIL;
if (!ActivateActCtx(this->m_hHostingAppContext, &ulpCookie))
return HRESULT_FROM_WIN32(GetLastError());
__try
{
hRes = this->m_ITheInterface->Funct();
}
__finally
{
if (!DeactivateActCtx(0, ulpCookie))
hRes = HRESULT_FROM_WIN32(GetLastError());
}
return hRes;
}
這可確保在將要求傳遞至 Funct的一些內部實作之前,會設定適當的啟用內容。 您自己的實作可以內嵌實際實作,但上述方法只要建立委派包裝函式,就能確保更容易的互通性。 在公開一般 (非 COM) 回呼時,建議使用類似的方法。