
[英]How can I access the address book in Xamarin.forms (for android and iOS)?
[英]MAPI and Outlook address book
我正在使用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 );
简单MAPI仅是ANSI。 外部MAPI dll不知道您已将其编译为Unicode,它所看到的只是一个预期以0x0终止的字符串。 您的Unicode(2字节)字符串的每个ANSI字符都为0x0,结尾处为双0x0。 因此,您的字符串以第一个0x0结尾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.