我有一个旧版应用程序,可以创建带有附件的电子邮件。该代码使用 MAPI 接口来创建消息。这段代码已经工作了很长一段时间。
当应用程序在 Windows 7 64 位计算机上运行时,对 MAPILogon 的调用将失败并出现一般错误代码。
MAPI 和 Win7 64 是否不兼容?还是有一些我不知道的 COM 问题?
看起来问题取决于您使用的 API 调用。
对 MAPISendMail 的调用应该没有问题。
对于要在 MAPI 应用程序中工作的所有其他 MAPI 方法和函数调用,MAPI 应用程序的位数(32 或 64)必须与要运行应用程序的计算机上的 MAPI 子系统的位数相同。
通常,32 位 MAPI 应用程序必须先在 64 位平台上运行(64 位 Windows 上的 64 位 Outlook),除非先将其重新构建为 64 位应用程序。
有关更详细的说明,请参阅在 32 位和 64 位平台上构建 MAPI 应用程序的 MSDN 页面
我在使用 Crystal Reports 8.5 的旧版应用程序中遇到了类似的情况。CR 报告查看器有一个“导出”按钮,它会打开一个对话框,让您选择一个“目标”,其中之一是“Microsoft Mail (MAPI)”。在 Windows 7 上导出到 MAPI 失败。
显然,问题是由于 Microsoft 在 Windows 7 中放弃了对“Simple MAPI”的支持。
我们能够通过 Microsoft 的此修补程序解决问题:http: //support.microsoft.com/kb/980681
这是其他一些讨论,可能对遇到类似问题的任何人都有帮助:
试试这个
@echo off
REM NOTE: The MAPI32.dll must be included in the same directory as this patchfile!!
REM NOTE: change the username to corresponding if you're not on a domain remove @domain
takeown /f c:\windows\system32\mapi32.dll
cacls c:\windows\system32\mapi32.dll /G administrator@domain:F
ren c:\windows\system32\mapi32.dll c:\windows\system32\mapi32.dll.ORIGINAL
copy mapi32.dll c:\windows\system32\mapi32.dll
if NOT '%PROCESSOR_ARCHITECTURE%'=='AMD64' goto END
takeown /f c:\windows\sysWOW64\mapi32.dll
cacls c:\windows\sysWOW64\mapi32.dll /G administrator@domain:F
ren c:\windows\sysWOW64\mapi32.dll c:\windows\sysWOW64\mapi32.dll.ORIGINAL
copy mapi32.dll c:\windows\sysWOW64\mapi32.dll
:END
不确定有关 MAPI 的具体情况,但可以在 .NET 中完成