具有64位Outlook的32位MAPI应用程序

时间:2012-10-09 18:04:22

标签: windows outlook mapi mapisendmail

32位版本的应用无法使用安装了64位Outlook的MAPISendMail发送电子邮件。它返回一个错误0x80004005,除了它似乎是一个MAPI初始化错误这个事实之外,我可以找到它。

根据this MSDN documentMAPISendMail是32位应用无法使用64位MAPI的规则的一个例外。然而它不起作用(至少在XP和Vista中 - 我们还没有测试过Win7 / 8)。

任何人都可以对此有所了解吗?

TIA

3 个答案:

答案 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连接起来:

  1. 主要的32位应用程序正在运行...
  2. 主要的32位呼叫桥64位应用程序;邮件数据(从,到,标题,正文...)存储在xml文件中。 xml文件是通过命令行传递的。
  3. 64桥应用开始,并调用MAPI函数。
  4. 64位Outlook可以完成其余工作。

此解决方案效果很好,而且我敢肯定我不必为MAPI库而苦恼。