Предварительный просмотр .msg в 64-битном приложении не работает

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

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

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

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

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


person Shijury    schedule 02.03.2020    source источник


Ответы (2)


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

person Dmitry Streblechenko    schedule 02.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);
[..]
person Shijury    schedule 03.03.2020