MAPILogonEx (…) возвращает NULL при вызове из MAPILogOn (…)

Я создаю почтовое приложение по умолчанию, такое как Thunderbird и Outlook, но только с некоторыми функциями. Так что теперь проблема только со словом 2007 и Excel 2007 при отправке файла из fileMenu -> send -> E-mail, и приложение падает после нажатия на E-mail, но то же самое работает в Powerpoint 2007 и одной заметке 2007.

С офисом 2007 MapiLogon (…) получает первый звонок, и вот мой MAPILogOn (…),

// I have used ofstream for the log purpose.
#include <MAPIX.h>

extern "C" ULONG MAPILogon(ULONG_PTR ulUIParam, LPSTR lpszProfileName, LPSTR lpszPassword, FLAGS flFlags, ULONG ulReserved, LPLHANDLE lplhSession)
{
ofstream outfile;
outfile.open("e:\\temp\\MAPILogon.txt");

HRESULT hrs = NULL;

MAPIINIT_0  MAPIINIT = { MAPI_INIT_VERSION, MAPI_NO_COINIT };
hrs = MAPIInitialize(NULL);
lplhSession = nullptr;
if (hrs != S_OK)
{
outfile << "\n MAPI uniititalized";
}
else
{
outfile << "\n MAPI initialized";

LPMAPISESSION FAR spSession = NULL;
outfile << "\n lplhsession - " << spSession;
hrs = MAPILogonEx(NULL, "Outlook", NULL, MAPI_EXTENDED | MAPI_NEW_SESSION, &spSession);
if (hrs == NULL)
{
outfile << "\n MAPI problem while log in." << spSession;
}
else if (hrs == S_OK)
{
outfile << "\n MAPI log in successful.";
return SUCCESS_SUCCESS;
}

outfile << "\n Last Error - " << GetLastError();
}
return MAPI_E_FAILURE;
}

Здесь я могу успешно инициализировать MAPI, но MAPILogOnEx (…) возвращает значение NULL, поэтому есть ли какие-либо другие вещи, которые здесь требуются?

GetLastError () возвращает 0. «Outlook» — профиль по умолчанию.

Я просмотрел все руководства по stackoverflow и Microsoft, но не смог найти решение.

0

Решение

MAPILogonEx возвращает HRESULT, а не указатель. Линии if (hrs == NULL) а также if (hrs == S_OK) одинаковы, так как NULL преобразуется в 0 компилятором. S_OK также 0.

0

Другие решения

Я изменил определение функции на это — и со следующим решением мне не нужны MAPIInitialize и MAPILogOnEx.

#define WINAPI      __stdcall
#define SUCCESS_SUCCESS         0

extern "C" ULONG WINAPI MAPILogon(ULONG_PTR ulUIParam, LPSTR lpszProfileName, LPSTR lpszPassword, FLAGS flFlags, ULONG ulReserved, LPLHANDLE lplhSession)
{
return Success_Success;
}

Я добавил .def файл со следующими строками —

; file_name.def
LIBRARY file_name
EXPORTS
MAPILogoff
MAPILogon
MAPISendDocuments
MAPISendMail
MAPISendMailW

Это единственные функции, которые мне нужны. Таким образом, Office 2007 вызывает именованные имена этих функций, и без этого Office 2007 не может найти функции, поэтому без сообщения приложения Office 2007 аварийно завершают работу. Теперь это работает. Теперь я должен протестировать один и тот же код со всеми офисными версиями и всеми ОС. Будем надеяться, что это сработает.

0

По вопросам рекламы [email protected]