我正在使用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处终止。