我们的应用程序的 32 位版本无法在MAPISendMail
安装了 64 位 Outlook 的情况下发送电子邮件。它返回一个错误 0x80004005,除了它似乎是一个 MAPI 初始化错误之外,我几乎找不到关于它的信息。
根据这个 MSDN 文档,MAPISendMail
是 32 位应用程序不能使用 64 位 MAPI 规则的一个例外。然而它不起作用(至少在 XP 和 Vista 上——我们还没有测试过 Win7/8)。
任何人都可以对此有所了解吗?
TIA
我们的应用程序的 32 位版本无法在MAPISendMail
安装了 64 位 Outlook 的情况下发送电子邮件。它返回一个错误 0x80004005,除了它似乎是一个 MAPI 初始化错误之外,我几乎找不到关于它的信息。
根据这个 MSDN 文档,MAPISendMail
是 32 位应用程序不能使用 64 位 MAPI 规则的一个例外。然而它不起作用(至少在 XP 和 Vista 上——我们还没有测试过 Win7/8)。
任何人都可以对此有所了解吗?
TIA
没有例外:32 位进程无法加载 64 位 dll。当您拥有 64 位版本的 Outlook 时,64 位版本的 mapi32.dll 包含实际实现。mapi32.dll 的 32 位版本是一个存根,它只返回一个错误。
这不是完全正确的@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 位应用程序。
更多信息可以在这里找到
几年前我也有同样的问题。我试了又试,但没有办法……微软阻止了 32 位和 64 位应用程序之间的一些交互:你甚至不能在 32 位应用程序中使用 64 位 OCX/OLE。
上面的Outlook Bridge解决方案 (@VMAtm) 在开始时工作,然后微软修复它,它停止工作。
最后,我实现了一个 64 位应用程序,我的桥应用程序,将主要的 32 位应用程序与 64 位前景连接起来:
这个解决方案运行良好,我很确定我不必为 MAPI 库而苦恼。