Давайте попробуем реализовать поддержку 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()