我正在努力理解平台调用服务、组件对象模型等概念,但我发现很难理解什么是什么以及不同的责任所在。我一直在研究包含以下内容的代码:
[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。我唯一的猜测是,区别因素在于前者是一个函数,后者是一个接口。
链接: - SHCreateItemFromParsingName函数 - IShellItem接口