MAPI和Outlook地址簿



我正在使用vc++ (MSDEV 2008)开发一个项目,它有一个功能来发送带有一些附件的电子邮件。我使用了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"。

请告诉我如何解决这个问题。

额外的注意:

谢谢你的回复。

使用简单的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 );

Simple MAPI仅为ANSI。外部MAPI dll不知道您是否将其编译为Unicode,它所看到的只是一个字符串,它期望以0x0结束。Unicode(2字节)字符串的每个ANSI字符都有0x0,末尾有两个0x0。因此,字符串在第一个0x0处终止。

最新更新