2016-07-19 12 views
0

私はthunderbirdとOutlookのようなデフォルトのメールアプリケーションを作成していますが、機能の一部のみを使用しています。それでは、問題は2007年の単語と2007年のExcelのみで、fileMenu - > send - >電子メールとアプリケーションから電子メールをクリックするとクラッシュしますが、Powerpoint 2007と1つのノート2007で同じことが起こっています。MAPILogonEx(...)はMAPILogOn(...)からの呼び出し中にNULLを返します

オフィス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

はい、あなたは正しいです、私はこの事をテストし、NULLとS_OKの両方が同じです。 –

+0

解決策を見て、私はここに書いています。しかし、Office 2007のアプリケーションはMAPILonOn(...)を呼び出していますが、私はそこに何もしていませんが、コードはソリューションでうまくいきます。なぜオフィス2007のアプリケーションがMAPILogOn(...)アプリケーションはMAPISendMail(...)またはMAPISendMailW(...)を直接呼び出しています –

+0

MAPILonOnはSimple 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 

これは私が必要な機能だけです。だから、オフィス2007は、この機能の装飾された名前を呼び出すと、これがなければ、オフィス2007は、メッセージを与えることなく機能を見つけることができないので、オフィス2007のアプリケーションがクラッシュしている。今それは働いています。今ではすべてのオフィスバージョンとすべてのOSで同じコードをテストする必要があります。それがうまくいくことを祈りましょう。

関連する問題