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

C# 如何将COM对象作为IntPtr传递给P/Invoke方法?,c#,.net,pinvoke,outlook-addin,mapi,C#,.net,Pinvoke,Outlook Addin,Mapi,目前正在使用外接程序Express开发Outlook外接程序,我必须恢复使用一些纯MAPI函数来读取MAPI属性 将此p/Invoke包装器添加到: 我正在尝试将类型为的Outlook附件对象作为第一个参数传递给函数 我目前失败的是如何将该对象“转换”为IntPtr,以便将其作为第一个参数传递给函数。我曾尝试使用,但很明显,这失败了,出现了一个异常,因为我没有传递结构,而只是传递了对非托管COM对象的引用 所以我的问题是: 如何通过传递COM对象成功调用HrGetOneProp方法?您想使用。我

目前正在使用外接程序Express开发Outlook外接程序,我必须恢复使用一些纯MAPI函数来读取MAPI属性

将此p/Invoke包装器添加到:

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

我目前失败的是如何将该对象“转换”为
IntPtr
,以便将其作为第一个参数传递给函数。我曾尝试使用,但很明显,这失败了,出现了一个异常,因为我没有传递结构,而只是传递了对非托管COM对象的引用

所以我的问题是:


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

您想使用。

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

谢谢,您的答案也可以。我决定投早期海报的票,希望你不介意。
[DllImport(@"MAPI32.DLL")]
static extern int HrGetOneProp(IntPtr pmp, uint ulPropTag, out IntPtr ppProp);