MAPI和Outlook通讯录

时间:2014-08-12 05:41:24

标签: visual-studio unicode outlook mapi

我正在使用VC ++开发一个项目(MSDEV 2008),它有一个函数可以发送带有一些附件的EMAIL。我使用MAPI函数来完成这项任务。

我使用项目设置构建项目"字符集:使用Unicode字符集"对于UNICODE兼容支持和文件类型是EXE扩展。这里一切正常。

我构建的同一项目是OCX文件扩展名。我可以显示"新发送邮件"带有一些附件的窗口。这里的问题是

单击地址簿图标("到"按钮)从列表中选择接收者邮件ID。它显示地址簿对话框,仅标题为" S"相反"选择姓名: * "。但这也适用于EXE项目。

代码:

HWND hWnd = this->GetSafeHwnd();
MAPIINIT_0 tMapInit = { 0, MAPI_MULTITHREAD_NOTIFICATIONS };
HRESULT hResult = MAPIInitialize( &tMapInit );
HMODULE hMapiMod = LoadLibrary(_T("mapi32.dll"));

ProcMapiLogon = (LPMAPILOGON)GetProcAddress( hMapiMod, "MAPILogon" );

(ProcMapiLogon)( (ULONG)hWnd, NULL, NULL, MAPI_LOGON_UI | MAPI_NEW_SESSION, 0,   &hCurrentSession );


LPMAPISENDMAIL ProcMapiSendMail = NULL;
ProcMapiSendMail = (LPMAPISENDMAIL)GetProcAddress(hMapiMod, "MAPISendMail");
(ProcMapiSendMail)(hCurrentSession, (ULONG)hWnd, &myMsg, MAPI_DIALOG | MAPI_LOGON__UI, 0);

问题是为什么“地址簿”对话框的标题在OCX项目中仅显示“S”。同样适用于exe项目。

请帮助我解决问题。

附加说明:

感谢您的回复。

使用简单的MAPI代码,一切正常(意味着我可以显示新的发送邮件窗口并在我点击“发送”按钮时发送)除了“地址簿”对话框的标题(标题)。

我也尝试了扩展的MAPI功能。当项目构建为.OCX文件扩展名如“SendMail.ocx”时,地址簿对话框的标题仅显示“S”。

扩展MAPI代码:

HMODULE hMapiMod = LoadLibrary(_T("mapi32.dll"));
LPMAPISESSION lppSession;
LPMAPILOGONEX ProcMapiLogonEx = NULL;
ProcMapiLogonEx = (LPMAPILOGONEX)GetProcAddress( hMapiMod, "MAPILogonEx" );
ProcMapiLogonEx)( (ULONG)hWnd, NULL, NULL, MAPI_USE_DEFAULT | MAPI_UNICODE |  MAPI_EXTENDED | MAPI_LOGON_UI | MAPI_NEW_SESSION, &lppSession );

1 个答案:

答案 0 :(得分:0)

简单MAPI仅限ANSI。外部MAPI dll不知道你是否遵守了Unicode,它看到的只是一个字符串,它希望是0x0终止。您的Unicode(2字节)字符串对于每个ANSI字符都是0x0,在结尾处是双0x0。因此,您的字符串将在第一个0x0处终止。