【问题标题】:Can I call MAPI32.DLL > MAPISendMail from a 64-bit C# Winforms application?我可以从 64 位 C# Winforms 应用程序调用 MAPI32.DLL > MAPISendMail 吗?
【发布时间】:2020-05-27 13:33:18
【问题描述】:

我已将 32 位 WinForms 应用程序转换为 64 位,但不确定调用 MAPI32.DLL > MAPISendMail 会做什么?我不认为您可以直接从 64 位 dll 调用 32 位 dll,但我想我会看看会发生什么。奇怪的是,它似乎有效,但我不知道它是否安全。

DLL 调用如下:

[DllImport("MAPI32.DLL")]
public static extern int MAPISendMail(IntPtr session, IntPtr hwnd, MapiMessage message, int flg, int rsv);

//...fill in message

// Call the API
int error = Mapi32.MAPISendMail(IntPtr.Zero, IntPtr.Zero, message, Mapi32.MAPI_DIALOG, 0);

从 64 位 WinForms 应用程序执行此操作是否安全,还是我很幸运它没有崩溃?

【问题讨论】:

标签: c# winforms 64-bit mapi


【解决方案1】:

是的,它是安全的。将从适当的系统目录使用和加载适当的库(mapi32.dll):

  • x64 或 x86 原生
%windir%\system32\mapi32.dll
  • 魔兽模式下的 x86
%windir%\syswow64\mapi32.dll

您可以在Building MAPI applications on 32-bit and 64-bit platforms 文章中阅读更多相关信息。

【讨论】:

  • 谢谢。我现在已经使用“进程资源管理器”确认我的 32 位应用程序加载“C:\Windows\SysWOW64\mapi32.dll”,而我的 64 位应用程序加载“C:\Windows\System32”。因此,Windows 会根据我的应用程序的位数自动找到要使用的正确 dll。
猜你喜欢
  • 2012-01-23
  • 2013-11-26
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 2019-03-07
  • 2019-08-28
相关资源
最近更新 更多