2016-07-19 71 views
0

我正在創建類似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」是默認配置文件。

我查看了所有的教程stackoverflow和微軟,但無法獲得解決方案。

回答

0

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,你爲什麼需要它? –

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應用程序就會崩潰。現在它正在工作。現在我必須測試所有辦公版本和所有操作系統的相同代碼。讓我們希望它的工作。

相關問題