Шаг 194 - Поддержка MAPI вручную

Давайте попробуем реализовать поддержку MAPI без всяких волшебников, а вручную. Для этого создадим приложение AppWizard на базе диалогового окна и поместим кнопку, к которой и припишем код инициализации MAPI.

В первую очередь нам нужно поместить заголовочный файл с описанием функций MAPI.

// TestMapiDlg.cpp : implementation file
//
.........
#include "mapix.h"
.........

Вот теперь надо подключить библиотеку с самим функциями в Project Setting и имя ее Mapi32.lib, ну все можно писать код.

void CTestMapiDlg::OnButton1() 
{
HRESULT hR = MAPIInitialize(NULL); 
ASSERT(S_OK == hR); 
LPMAPISESSION pS = NULL; 
hR = MAPILogonEx(0,NULL,NULL,MAPI_LOGON_UI | 
		MAPI_ALLOW_OTHERS | MAPI_EXTENDED,&pS); 
if (S_OK == hR)  AfxMessageBox("Ok !"); 
else    AfxMessageBox("Bad !"); 
MAPIUninitialize(); 
}

Смотрим чего там написано. Первая функция MAPIInitialize производит инициализацию данных в системных модулях DLL. Сама функция вот такая.

HRESULT 
MAPIInitialize
(
  LPVOID lpMapiInit  
);

Но вместо структуры lpMapiInit можно передать NULL, что и делается. Если все нормально, то функция вернет S_OK. Следующим вызовом является MAPILogonEx. Эта функция регистрации клиента для работы с MAPI.

HRESULT MAPILogonEx
(
  ULONG ulUIParam,                
  LPTSTR lpszProfileName,         
  LPTSTR lpszPassword,            
  FLAGS flFlags,                  
  LPMAPISESSION FAR * lppSession  
);

И последняя функция - это деинициализация клиента MAPIUninitialize, эта функция обратная MAPIInitialize и количество вызовов той и другой должно совпадать.

void MAPIUninitialize()

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.