32位版本的应用无法使用安装了64位Outlook的MAPISendMail
发送电子邮件。它返回一个错误0x80004005,除了它似乎是一个MAPI初始化错误这个事实之外,我可以找到它。
根据this MSDN document,MAPISendMail
是32位应用无法使用64位MAPI的规则的一个例外。然而它不起作用(至少在XP和Vista中 - 我们还没有测试过Win7 / 8)。
任何人都可以对此有所了解吗?
TIA
答案 0 :(得分:4)
这不是完全正确的@DmitryStreblechenko, - 至少不适用于MAPISendMail
功能。为此,只有这样,才有可能构建一个" Outlook64 Bridge"。然后,这会将32位MAPISendMail
电话重定向到64位Outlook。那座桥可能看起来像:
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Outlook64Bridge]
@="Outlook64Bridge"
"DLLPathEx"="c:\\Windows\\winsxs\\x86_microsof t-windows-mapi_31bf3856ad364e35_6.1.7600.16385_none_ab239772 7b134496\\MAPI32.DLL"
"DLLPath"="c:\\Windows\\winsxs\\x86_microsoft-windows-mapi_31bf3856ad364e35_6.1.7600.16385_none_ab239772 7b134496\\MAPI32.DLL"
重要, - 您首先检查32位mapi32.dll
的正确路径!
将这些行添加到reg后,您必须将Outlook64Bridge
设置为默认邮件客户端:
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail]
@="Outlook64Bridge"
确认适用于使用仅 MAPISendMail 功能的简单32位应用程序。
可以找到更多信息here
答案 1 :(得分:3)
没有例外:32位进程无法加载64位dll。 当您拥有64位版本的Outlook时,64位版本的mapi32.dll包含实际的实现。 32位版本的mapi32.dll是一个只会返回错误的存根。
答案 2 :(得分:0)
几年前,我遇到了同样的问题。我试了又试,但是没有办法……Microsoft阻止了32位和64位应用程序之间的某些交互:您甚至不能在32位应用程序中使用64位OCX / OLE。
上面的 Outlook Bridge 解决方案(@VMAtm)从一开始就起作用,然后Microsoft 修复了它,然后停止了工作。
最后,我实现了一个64位应用程序(我的 bridge应用程序),以将主要的32位应用程序与64位Outlook连接起来:
此解决方案效果很好,而且我敢肯定我不必为MAPI库而苦恼。