5

我们的应用程序的 32 位版本无法在MAPISendMail安装了 64 位 Outlook 的情况下发送电子邮件。它返回一个错误 0x80004005,除了它似乎是一个 MAPI 初始化错误之外,我几乎找不到关于它的信息。

根据这个 MSDN 文档MAPISendMail是 32 位应用程序不能使用 64 位 MAPI 规则的一个例外。然而它不起作用(至少在 XP 和 Vista 上——我们还没有测试过 Win7/8)。

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

TIA

4

3 回答 3

4

没有例外:32 位进程无法加载 64 位 dll。当您拥有 64 位版本的 Outlook 时,64 位版本的 mapi32.dll 包含实际实现。mapi32.dll 的 32 位版本是一个存根,它只返回一个错误。

于 2012-10-09T18:27:05.547 回答
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 位应用程序。

更多信息可以在这里找到

于 2014-08-18T11:49:03.863 回答
2

几年前我也有同样的问题。我试了又试,但没有办法……微软阻止了 32 位和 64 位应用程序之间的一些交互:你甚至不能在 32 位应用程序中使用 64 位 OCX/OLE。

上面的Outlook Bridge解决方案 (@VMAtm) 在开始时工作,然后微软修复它,它停止工作。

最后,我实现了一个 64 位应用程序,我的桥应用程序,将主要的 32 位应用程序与 64 位前景连接起来:

  1. 主 32 位应用程序正在运行...
  2. 主要32位调用桥接64位应用;邮件数据(发件人、收件人、标题、正文...)存储在 xml 文件中。xml 文件通过命令行传递。
  3. 64桥应用程序启动,并调用MAPI函数。
  4. 64 位 Outlook 完成剩下的工作。

这个解决方案运行良好,我很确定我不必为 MAPI 库而苦恼。

于 2019-09-20T08:49:24.100 回答