【发布时间】:2017-10-15 12:06:04
【问题描述】:
我试图围绕平台调用服务、组件对象模型等概念展开思考,但我发现很难理解什么是什么以及不同的职责在哪里。我一直在研究包含以下内容的代码:
[DllImport("shell32.dll", CharSet = CharSet.Unicode, PreserveSig = false)]
[return: MarshalAs(UnmanagedType.Interface)]
internal static extern object SHCreateItemFromParsingName([MarshalAs(UnmanagedType.LPWStr)] string pszPath, IBindCtx pbc, ref Guid riid);
[ComImport]
[Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IShellItem
据我了解,前者导入了一个创建 shell 项的函数,而后者导入了创建它们所需的类型(接口)。
我不明白为什么一个使用 DllImport 而另一个使用 ComImport。他们各自的文档中没有任何内容说明使用哪种方法,文档也没有提供 COM 对象的 GUID。我唯一的猜测是差异化因素是前者是一个函数,而后者是一个接口。
【问题讨论】:
-
ComImport 在这种情况下是可选的。你可以删除它。它在 COM coclass 上非常有用(你想在上面调用 C# 的
new的 .NET 类)