Предварительный просмотр .msg в 64-битном приложении не работает - PullRequest
0 голосов
/ 02 марта 2020

У нас проблемы с нашим 64-битным приложением (Addin for Outlook). В нашем приложении есть функция, которая должна отображать предварительный просмотр файлов * .msg. Работает нормально с windows explorer и в Outlook 32Bit. Когда я пытаюсь открыть файл нашим 64-битным приложением, возникает ошибка:

"Либо отсутствует почтовый клиент по умолчанию, либо текущий почтовый клиент не может выполнить запрос обмена сообщениями. Запустите Microsoft Outlook и установите его в качестве почтового клиента по умолчанию. "

Я перепробовал все, что предлагает inte rnet ... - Восстановить Outlook - Outlook как почтовый клиент по умолчанию - Новый профиль Outlook - ...

НЕТ возможности установить 32-битную версию нашего программного обеспечения или просто «отключить» эту функцию ...

У кого-нибудь есть решение, которое исправляет эту ошибку? Заранее спасибо ...

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Если у кого-то в будущем возникнет такая же проблема:

Мы исправили эту проблему. Поэтому мы используем следующие биты кода:

[..]
// read this documentation for explanation...
// https://docs.microsoft.com/en-us/windows/win32/api/wtypesbase/ne-wtypesbase-clsctx 
const uint CLSCTX_LOCAL_SERVER = 4;
uint hResult = CoCreateInstance(ref guid, null,
                CLSCTX_LOCAL_SERVER, ref IID_IUnknown, out instance);

mCurrentPreviewHandler = instance;
[..]

[DllImport("ole32.Dll")]
static public extern uint CoCreateInstance(ref Guid guid,
    [MarshalAs(UnmanagedType.IUnknown)] object inner,
    uint context,
    ref Guid uuid,
    [MarshalAs(UnmanagedType.IUnknown)] out object rReturnedComObject);
[..]
0 голосов
/ 02 марта 2020

Этого и следовало ожидать - 64-битное приложение не может загружать 32-битные DLL (это то, что система MAPI).

...