共用方式為


使用來自託管元件的回呼

來自託管元件的回呼可讓裝載成為可能。 不過,您裝載的元件可能已啟動另一個作用環境,它用來存取其本身的外掛程式或元件。 在此情況下,如果裝載的元件在堆疊上留下了參考其自身 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)回呼時,使用類似的方法。