Выбор определенной версии MAPI для загрузки
Область применения: Outlook 2013 | Outlook 2016
При явной компоновке с реализацией MAPI необходимо тщательно выбрать, какую реализацию следует загрузить.
Существует два метода явной связи с реализацией MAPI.
Загрузите библиотеку заглушки MAPI и укажите в реестре настраиваемую библиотеку DLL для загрузки и отправки вызовов MAPI. Или:
Реализуйте алгоритм подстановки клиента MAPI, чтобы найти версию MAPI, используемую почтовым клиентом по умолчанию, и загрузить ее.
Так как вы можете изменить параметры реестраMapi32.dll заглушки , чтобы приложение использовало любую реализацию MAPI, рекомендуется направить приложение на использование протестированной реализации MAPI. Ниже описаны оба метода явной компоновки.
Чтение сведений о реализации MAPI из реестра
Разделы реестра, указывающие настраиваемую библиотеку DLL для почтового клиента, находятся под
HKLM\Software\Clients\Mail
ключом почтового клиента.В следующей таблице описаны эти ключи:
Ключ Описание MSIComponentID Идентификатор категории publishComponent (GUID) установщика Windows, который идентифицирует библиотеку DLL, которая экспортирует простые вызовы MAPI или MAPI. Если этот параметр задан, этот ключ имеет приоритет над ключом DLLPath или DLLPathEx . MSIApplicationLCID Идентификатор языкового стандарта (LCID) для приложения. Первое строковое значение определяет вложенный ключ из HKLM\Software
, а последующие строковые значения определяют значения реестра под этим разделом, содержащие сведения о языковом стандарте.MSIOfficeLCID LCID для Microsoft Office. Первое строковое значение определяет вложенный ключ из HKLM\Software
, а последующие строковые значения определяют значения реестра под этим разделом.Получите сведения из этих ключей.
Передайте значения, полученные на предыдущем шаге, в функцию FGetComponentPath . FGetComponentPath — это функция, экспортируемая библиотекой заглушки MAPI Mapistub.dll. Возвращает путь к пользовательской версии MAPI.
Загрузка реализации MAPI, помеченной как по умолчанию
HKLM\Software\Clients\Mail::(default)
Чтение значения реестра.Найдите сведения для указанного клиента, как описано выше.
Примечание.
Обратите внимание, что почтовый клиент по умолчанию может не реализовать расширенный MAPI.
Пример
Чтобы загрузить MAPI, как реализовано в Outlook, найдите разделы реестра в HKLM\Software\Clients\Mail\Microsoft Outlook
разделе и передайте их в FGetComponentPath.
FGetComponentPath вернет путь для реализации MAPI в Outlook.
Если ключи MSIComponentID, MSIApplicationLCID и MSIOfficeLCID не заданы, проверка значение реестра DLLPathEx. Если ключи заданы, FGetComponentPath предоставляет путь реализации MAPI клиента.
Реализация алгоритма поиска клиента MAPI
В следующей таблице перечислены четыре функции из MFCMAPI, которые используются для поиска пути для пользовательской реализации MAPI:
Function | Описание |
---|---|
GetMAPIPath |
Возвращает путь к библиотеке MAPI. |
GetMailKey |
Возвращает раздел реестра почты MAPI. |
GetMapiMsiIds |
Возвращает идентификатор установщика Windows. |
GetComponentPath |
Возвращает путь к компоненту с помощью FGetComponentPath. |
Так как MFCMAPI по умолчанию загружает реализацию MAPI по умолчанию, если вы хотите использовать другую реализацию MAPI, необходимо явно направить ее на это. Это выполняется с помощью подпрограммы SESSION\Load MAPI .
Принцип работы этих функций
MFCMAPI вызывает
GetMAPIPath
, передав значение NULL для параметра клиента, чтобы загрузить реализацию MAPI по умолчанию.GetMAPIPath
вызываетGetMapiMsiIds
для чтения значений MSIComponentID, MSIApplicationLCID и MSIOfficeLCID.GetMapiMsiIds
вызываетGetMailKey
, чтобы открыть раздел реестра для почтового клиента по умолчанию.GetMapiMsiIds
использует дескриптор реестра, возвращенный дляGetMailKey
поиска значений MSIComponentID, MSIApplicationLCID и MSIOfficeLCID.Значения MSIComponentID, MSIApplicationLCID и MSIOfficeLCID возвращаются в
GetMAPIPath
.GetMAPIPath
затем передает их вGetComponentPath
.GetComponentPath
загружает библиотеку заглушки MAPI Mapi32.dll из системного каталога.GetComponentPath
затем извлекает адрес функции FGetComponentPath из Mapi32.dll, при условии, что Mapi32.dll экспортирует FGetComponentPath.Если получить адрес FGetComponentPath из Mapi32.dll не удается,
GetComponentPath
получает адрес из Mapistub.dll.GetComponentPath
затем вызывает FGetComponentPath, получая путь к версии MAPI по умолчанию.GetMAPIPath
затем возвращает этот путь вызывающему объекту, который затем загружает MAPI и явным образом связывает его, как описано в разделе Связь с функциями MAPI.
Примечание.
- Для поддержки локализованных копий MAPI для английских и неанглийских языковых стандартов считывает
GetMAPIPath
значения подразделов MSIApplicationLCID и MSIOfficeLCID .GetMAPIPath
затем вызывает FGetComponentPath, сначала указывая MSIApplicationLCID как szQualifier, и снова указывая MSIOfficeLCID как szQualifier. Дополнительные сведения о разделах реестра для почтовых клиентов, поддерживающих языки, отличные от английского, см. в статье Настройка ключей MSI для библиотеки DLL MAPI. - Если MFCMAPI не получает путь для MAPI с помощью
GetMAPIPath
, он загружает библиотеку заглушки MAPI из системного каталога. - Значение реестра MSMapiApps , описанное в разделе Явное сопоставление вызовов MAPI с библиотеками DLL MAPI, применяется только при использовании библиотеки заглушки MAPI. Приложениям, которые загружают определенную реализацию MAPI или загружают реализацию по умолчанию, не нужно задавать раздел реестра MSMapiApps .