c# - 如何将 COM 对象作为 IntPtr 传递给 P/Invoke 方法?

标签 c# .net pinvoke outlook-addin mapi

目前正在使用 Add-in Express 开发 Outlook 加载项,我必须恢复到一些纯 MAPI 函数来读取 MAPI 属性。

将此 P/Invoke 包装器添加到 HrGetOneProp function :

[DllImport(@"MAPI32.DLL")]
static extern int HrGetOneProp(IntPtr pmp, uint ulPropTag, out IntPtr ppProp);

我正在尝试传递 IMAPIProp 类型的 Outlook 附件对象作为函数的第一个参数。

我目前失败的是如何将该对象“转换”为 IntPtr,以便我可以将其作为第一个参数传递给函数。我试过使用 Marshal.StructureToPtr但显然这失败并出现异常,因为我不是传递结构,而只是传递对非托管 COM 对象的引用。

所以我的问题是:

如何通过传递COM对象成功调用HrGetOneProp方法?

最佳答案

关于c# - 如何将 COM 对象作为 IntPtr 传递给 P/Invoke 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12507998/

相关文章:

c# - 尝试在 C# 中加载程序集时出错

c# - 结合 2 个数字成为日期 C#

.net - 在 Node.js 中使用 .NET System.SpecialFolders 或类似枚举

c# - 不屈不挠的野兽 : a 2d char array, 在结构内部,在非托管 dll 的腹部

c# - 这两种结构有什么区别

c# - 无法打开数据库,因为它是 706 版本。此服务器支持 655 及更早版本。不支持降级路径

c# - 必须使用完全限定的类名

c# - MahApps MetroProgressBar 无法在 ControlTemplate 内工作

c# - List<T> 构造函数 (IEnumerable<T>) 不接受从 Array.CreateInstance(Type, Int32) 创建的数组

c# - DLLImport Int** - 如果可以的话如何做