Barındırılan Bileşenlerden Geri Çağırmaları Kullanma

Barındırmayı mümkün kılan, barındırılan bileşenlerden gelen geri çağırmalardır. Ancak, barındırdığınız bileşenin eklentilere veya kendi bileşenlerine erişmek için kullandığı başka bir etkinleştirme bağlamını etkinleştirmesi mümkündür. Bu durumda, barındırılan bileşen kendi COM nesnesine başvuran yığında bir etkinleştirme bağlamı bırakırsa, barındırma uygulaması, kendi uygulaması olduğunu düşündüğü bir nesneyi almak isterken, bunun yerine barındırılan bileşenin nesnesini almak için CoCreateInstance çağırabilir. Etkinleştirme bağlamlarının bu devralınmasını önlemek için iyi bir barındırma uygulaması, geri arama sırasında önce kendi iyi bilinen etkinleştirme bağlamını etkinleştirmelidir.

Barındırma uygulamasının kodunu koruyan aşağıdaki örneği göz önünde bulundurun:

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;
}

Bu, isteği Funct'in bazı iç uygulamalarına geçirmeden önce uygun bir etkinleştirme bağlamının ayarlanmasını sağlar. Kendi uygulamanızda gerçek uygulamayı doğrudan içerebilir, ancak söz konusu yöntem sadece temsilcili sarmalayıcılar oluşturarak birlikte çalışabilirliği kolaylaştırır. Normal (COM olmayan) geri çağırmaları gösterirken benzer bir yöntem kullanılması önerilir.