【问题标题】:How to pass a COM object as an IntPtr to a P/Invoke method?如何将 COM 对象作为 IntPtr 传递给 P/Invoke 方法?
【发布时间】:2012-09-12 13:06:38
【问题描述】:

目前正在使用 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# .net pinvoke outlook-addin mapi


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      我相信Marshal.GetComInterfaceForObjectMarshal.GetIUnknownForObjectMarshal.GetIDispatchForObject 中的任何一个都应该可以工作

      【讨论】:

      • 谢谢,您的回答也有效。我决定投票给较早的海报,希望你不要介意。
      猜你喜欢
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 2014-04-22
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      相关资源
      最近更新 更多