Compartir a través de


Desconectar un complemento de estado sin conexión

Hace referencia a: Outlook 2013 | Outlook 2016

Cuando el complemento de estado sin conexión está desconectado, deberá implementar funciones para finalizar correctamente y limpiar el complemento. Para obtener más información sobre cómo configurar y usar el complemento de estado sin conexión para supervisar los cambios de estado de conexión, vea Configurar un complemento de estado sin conexión y Supervisar los cambios de estado de conexión con un complemento de estado sin conexión.

En este artículo, se muestran estas funciones de desconexión, finalización y limpieza mediante ejemplos de código desde el complemento de estado sin conexión de muestra. El complemento estado sin conexión de muestra es un complemento COM que agrega un menú Estado sin conexión a Outlook y usa la API de estado sin conexión. Mediante el menú estado sin conexión, se puede habilitar o deshabilitar la supervisión del estado, comprobar el estado actual y cambiar el estado actual. Para obtener más información sobre cómo descargar e instalar el complemento estado sin conexión de muestra, vea Instalar el complemento de estado sin conexión de muestra. Para obtener más información acerca de la API de estado sin conexión, vea Información sobre la API de estado sin conexión.

Rutina En desconexión

Se llama al método IDTExtensibility2.OnDisconnection cuando el complemento de estado sin conexión se descarga. Es recomendable implementar el código de limpieza en esta función. En el ejemplo siguiente, la función IDTExtensibility2.OnDisconnection llama a la HrTermAddin función .

Ejemplo CMyAddin::OnDisconnection()

STDMETHODIMP CMyAddin::OnDisconnection(ext_DisconnectMode /*RemoveMode*/, SAFEARRAY * * /*custom*/) 
{ 
    Log(true,"OnDisconnection\n"); 
    HRESULT hRes = S_OK; 
    hRes = HrTermAddin(); 
     return hRes; 
}

Finalizar la función de complemento

La HrTermAddin función llama a las inDeInitMonitorfunciones , HrRemoveMenuItemsy UnloadLibraries para terminar de limpiar el complemento de estado sin conexión.

Ejemplo CMyAddin::HrTermAddin()

HRESULT CMyAddin::HrTermAddin() 
{ 
    HRESULT hRes = S_OK; 
    DeInitMonitor(); 
    hRes =  HrRemoveMenuItems(); 
    UnloadLibraries(); 
    return hRes; 
}

Rutina Desinicializar supervisión

La inDeInitMonitor función llama a la función IMAPIOfflineMgr::Unadvise para cancelar las devoluciones de llamada del objeto sin conexión.

Ejemplo DeInitMonitor()

void DeInitMonitor() 
{ 
Log(true,_T("Deinitializing Outlook Offline State Monitor\n")); 
HRESULT hRes = S_OK; 
if (g_lpOfflineMgr) 
{ 
hRes = g_lpOfflineMgr->Unadvise(MAPIOFFLINE_UNADVISE_DEFAULT, g_ulAdviseToken); 
g_lpOfflineMgr->Release(); 
g_lpOfflineMgr = NULL; 
g_ulAdviseToken = NULL; 
} 
}

Rutina Quitar elementos de menú

La HrRemoveMenuItems función llama a DispEventUnadvise para cada elemento de menú en el menú Estado sin conexión y, a continuación, elimina el menú Estado sin conexión .

Ejemplo CMyAddin::HrRemoveMenuItems()

HRESULT CMyAddin::HrRemoveMenuItems() 
{     
    Log(true,"HrRemoveMenuItems\n"); 
    HRESULT hRes = S_OK; 
    if (m_fMenuItemsAdded) 
    { 
        try 
        { 
            if (m_spInitButton) 
            { 
                m_InitButtonHandler.DispEventUnadvise(m_spInitButton); 
            } 
            if (m_spDeinitButton) 
            { 
                m_DeinitButtonHandler.DispEventUnadvise(m_spDeinitButton); 
            } 
            if (m_spGetStateButton) 
            { 
                m_GetStateButtonHandler.DispEventUnadvise(m_spGetStateButton); 
            } 
            if (m_spSetStateButton) 
            { 
                m_SetStateButtonHandler.DispEventUnadvise(m_spSetStateButton); 
            } 
 
            m_spMyMenu->Delete(); 
        } 
        catch(_com_error) 
        { 
            hRes = E_FAIL; 
        } 
        if (SUCCEEDED(hRes)) 
        { 
            m_fMenuItemsAdded = false; 
        } 
    } 
    return hRes; 
}

Rutina Descargar bibliotecas

Cuando el complemento se descarga de Outlook, la UnloadLibraries función descarga las bibliotecas de vínculos dinámicos (DLL) necesarias para el complemento.

Ejemplo UnloadLibraries()

void UnloadLibraries() 
{ 
    Log(true,_T("UnloadLibraries - freeing modules\n")); 
    pfnHrOpenOfflineObj = NULL; 
    pfnMAPIFreeBuffer = NULL; 
    if (hModMSMAPI) FreeLibrary(hModMSMAPI); 
    hModMSMAPI = NULL; 
    if (hModMAPI) FreeLibrary(hModMAPI); 
    hModMAPI = NULL; 
    if (hModMAPIStub) FreeLibrary(hModMAPIStub); 
    hModMAPIStub = NULL; 
}

Vea también