Compartir a través de


Inicialización del proveedor de transporte

Hace referencia a: Outlook 2013 | Outlook 2016

La interfaz transport-spooler define las llamadas que realiza la cola MAPI a un proveedor de transporte. Los proveedores de transporte implementan estas rutinas en una biblioteca de vínculos dinámicos (DLL). El primer punto de entrada directo en el archivo DLL usado por la cola MAPI debe ser la función de inicialización del proveedor de transporte XPProviderInit.

MAPI usa la rutina GetProcAddress para obtener la dirección de la rutina de inicialización del proveedor de servicios y, a continuación, llama a esa rutina. El nombre de la rutina de inicialización es XPProviderInit para los proveedores de transporte. Es diferente para otros tipos de proveedores de servicios MAPI, de modo que un archivo DLL puede contener cualquier combinación de tipos de proveedor de servicios, pero solo un proveedor de servicios de un tipo determinado. Sin embargo, un proveedor de servicios de un tipo determinado puede implementar varios servicios de su tipo. Por ejemplo, un proveedor de transporte puede implementar la funcionalidad de transporte de mensajes en varios servicios de mensajes.

El archivo de encabezado mapispi.h tiene una definición de tipo para el prototipo de función de la función de inicialización del proveedor de transporte y un nombre de procedimiento predefinido para él. Al asignar un nombre a las rutinas de inicialización en los archivos de C y C++ con los mismos nombres usados por GetProcAddress y mediante una declaración de exportación sencilla en el archivo DLL.DEF, se obtiene automáticamente la comprobación de tipos de los parámetros de la rutina de inicialización. Consulte el código fuente del proveedor de transporte de ejemplo para obtener ejemplos. Para obtener más información, vea Ejemplo de proveedor de transporte.

Si la llamada de inicialización de un proveedor de servicios se realiza correctamente pero devuelve un número de versión de interfaz de proveedor de servicios demasiado pequeño para que MAPI lo controle, MAPI llama inmediatamente al método Release del objeto del proveedor de servicios y continúa como si la llamada de inicialización hubiera producido un error con MAPI_E_VERSION. De este modo, MAPI y el proveedor de servicios definen conjuntamente el intervalo de números de versión de la interfaz del proveedor de servicios que pueden controlar y, si nada coincide, se produce un error en la carga del proveedor de servicios con un valor devuelto MAPI_E_VERSION.

El último paso para que la cola MAPI obtenga acceso a los recursos del proveedor de servicios es iniciar sesión en el proveedor de transporte. La cola MAPI llama al método IXPProvider::TransportLogon del objeto IXPProvider : IUnknown devuelto desde XPProviderInit. Esta es la llamada donde las credenciales, si se usan, están activadas y se pueden permitir cuadros de diálogo.

Si un proceso abre una segunda sesión de transporte en el mismo proveedor de transporte y sesión MAPI, el archivo DLL del proveedor de transporte no debe crear un segundo objeto de proveedor. El primer objeto de proveedor debe usarse para iniciar sesión en la segunda sesión de transporte. Un proveedor de transporte debe programarse para admitir varias sesiones de transporte en un único objeto de proveedor. Solo se debe crear un segundo objeto de proveedor si se usan distintas sesiones MAPI en el mismo proceso.