MAPILogonEx(...)在从MAPILogOn(...)调用时返回NULL

问题描述:

我正在创建类似thunderbird和Outlook的默认邮件应用程序,但仅包含一些功能。所以,现在的问题是,只有在Word 2007和Excel 2007中,从fileMenu发送文件 - >发送 - >电子邮件和应用程序在点击电子邮件后崩溃,但同样的事情在Powerpoint 2007和一个笔记2007中工作。MAPILogonEx(...)在从MAPILogOn(...)调用时返回NULL

与Office 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”是默认配置文件。

我查看了所有的教程*和微软,但无法获得解决方案。

MAPILogonEx返回HRESULT,而不是指针。行if (hrs == NULL)if (hrs == S_OK)是相同的,因为编译器将NULL转换为0。 S_OK也是0.

+0

是的你是正确的,我测试了这个东西,并且NULL和S_OK都是一样的。 –

+0

看看我写在这里的解决方案。但事情是办公室2007年的应用程序调用MAPILonOn(...),我没有做任何事情,仍然代码是好的解决方案,所以为什么Office 2007应用程序调用MAPILogOn(...),而其他Office版本应用程序直接调用MAPISendMail(...)或MAPISendMailW(...) –

+0

MAPILonOn是简单的MAPI,你为什么需要它? –

我改变了函数的定义 - 以下面的解决方案我不需要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应用程序就会崩溃。现在它正在工作。现在我必须测试所有办公版本和所有操作系统的相同代码。让我们希望它的工作。