私は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のすべてのチュートリアルを見ていますが、解決策を手に入れることはできません。
はい、あなたは正しいです、私はこの事をテストし、NULLとS_OKの両方が同じです。 –
解決策を見て、私はここに書いています。しかし、Office 2007のアプリケーションはMAPILonOn(...)を呼び出していますが、私はそこに何もしていませんが、コードはソリューションでうまくいきます。なぜオフィス2007のアプリケーションがMAPILogOn(...)アプリケーションはMAPISendMail(...)またはMAPISendMailW(...)を直接呼び出しています –
MAPILonOnはSimple MAPIですが、なぜそれが必要でしょうか? –