我正在创建像thunderbird和outlook这样的默认邮件应用程序,但只提供一些功能。所以现在问题只是在从fileMenu发送文件时使用2007和excel 2007这个词 - >发送 - >单击电子邮件后电子邮件和应用程序崩溃,但同样的事情在Powerpoint 2007和2007年的一个注释中有效。
使用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和Microsoft的所有教程但无法获得解决方案。
答案 0 :(得分:0)
MAPILogonEx返回HRESULT,而不是指针。行if (hrs == NULL)
和if (hrs == S_OK)
是相同的,因为编译器将NULL转换为0。 S_OK也是0。
答案 1 :(得分: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应用程序崩溃了。现在它正在运作。现在我必须使用所有办公室版本和所有操作系统测试相同的代码。我们希望它有效。