Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 inDeInitMonitor
funciones , HrRemoveMenuItems
y 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
- Información sobre la API de estado sin conexión
- Instalar el complemento de estado sin conexión de muestra
- Información sobre el complemento de estado sin conexión de muestra
- Configurar un complemento de estado sin conexión
- Supervisar los cambios de estado de conexión con un complemento de estado sin conexión