C# 如何将COM对象作为IntPtr传递给P/Invoke方法?
目前正在使用外接程序Express开发Outlook外接程序,我必须恢复使用一些纯MAPI函数来读取MAPI属性 将此p/Invoke包装器添加到: 我正在尝试将类型为的Outlook附件对象作为第一个参数传递给函数 我目前失败的是如何将该对象“转换”为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方法?您想使用。我
IntPtr
,以便将其作为第一个参数传递给函数。我曾尝试使用,但很明显,这失败了,出现了一个异常,因为我没有传递结构,而只是传递了对非托管COM对象的引用
所以我的问题是:
如何通过传递COM对象成功调用
HrGetOneProp
方法?您想使用。我相信Marshal.GetComInterfaceForObject
,Marshal.getIUnkNowObject
或Marshal.GetIDispatchForObject
中的任何一个都应该可以工作谢谢,您的答案也可以。我决定投早期海报的票,希望你不介意。
[DllImport(@"MAPI32.DLL")]
static extern int HrGetOneProp(IntPtr pmp, uint ulPropTag, out IntPtr ppProp);