我可以从 64 位 C# Winforms 应用程序调用 MAPI32.DLL > MAPISendMail 吗?
Can I call MAPI32.DLL > MAPISendMail from a 64-bit C# Winforms application?
我已将 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 应用程序执行此操作是否安全,或者我只是幸运它没有崩溃?
是的,很安全。将从适当的系统目录使用和加载 (mapi32.dll) 适当的库:
- 原生 x64 或 x86
%windir%\system32\mapi32.dll
- x86 魔兽世界模式
%windir%\syswow64\mapi32.dll
您可以在 Building MAPI applications on 32-bit and 64-bit platforms 文章中阅读更多相关信息。
我已将 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 应用程序执行此操作是否安全,或者我只是幸运它没有崩溃?
是的,很安全。将从适当的系统目录使用和加载 (mapi32.dll) 适当的库:
- 原生 x64 或 x86
%windir%\system32\mapi32.dll
- x86 魔兽世界模式
%windir%\syswow64\mapi32.dll
您可以在 Building MAPI applications on 32-bit and 64-bit platforms 文章中阅读更多相关信息。