我正在使用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 );
答案 0 :(得分:0)
简单MAPI仅限ANSI。外部MAPI dll不知道你是否遵守了Unicode,它看到的只是一个字符串,它希望是0x0终止。您的Unicode(2字节)字符串对于每个ANSI字符都是0x0,在结尾处是双0x0。因此,您的字符串将在第一个0x0处终止。