using System; using System.Runtime.InteropServices; using System.Security; namespace Vanara.PInvoke { public static partial class Shell32 { /// /// Exposes methods that enable clients to access items in a collection of objects that support IUnknown. /// /// /// When to Implement /// Clients do not need to implement this interface. /// When to Use /// Use this interface to access generic objects in an array. /// // https://docs.microsoft.com/en-us/windows/desktop/api/objectarray/nn-objectarray-iobjectarray [PInvokeData("objectarray.h", MSDNShortId = "ab0bb213-dc9c-4853-98d7-668e7ca76583")] [SuppressUnmanagedCodeSecurity] [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("92CA9DCD-5622-4bba-A805-5E9F541BD8C9")] public interface IObjectArray { /// Provides a count of the objects in the collection. /// The number of objects in the collection. uint GetCount(); /// Provides a pointer to a specified object's interface. The object and interface are specified by index and interface ID. /// The index of the object /// Reference to the desired interface ID. /// Receives the interface pointer requested in riid. [return: MarshalAs(UnmanagedType.IUnknown)] object GetAt([In] uint uiIndex, in Guid riid); } /// /// /// Extends the IObjectArray interface by providing methods that enable clients to add and remove objects that support IUnknown in a collection. /// /// /// /// When to Use /// Use this interface to interact with a collection of generic objects. /// // https://docs.microsoft.com/en-us/windows/desktop/api/objectarray/nn-objectarray-iobjectcollection [PInvokeData("objectarray.h", MSDNShortId = "d7665b26-5839-4b08-a099-ef25a68c65db")] [SuppressUnmanagedCodeSecurity] [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("5632b1a4-e38a-400a-928a-d4cd63230295"), CoClass(typeof(CEnumerableObjectCollection))] public interface IObjectCollection : IObjectArray { /// Provides a count of the objects in the collection. /// The number of objects in the collection. new uint GetCount(); /// Provides a pointer to a specified object's interface. The object and interface are specified by index and interface ID. /// The index of the object /// Reference to the desired interface ID. /// Receives the interface pointer requested in riid. [return: MarshalAs(UnmanagedType.IUnknown)] new object GetAt([In] uint uiIndex, in Guid riid); /// Adds a single object to the collection. /// Pointer to the IUnknown of the object to be added to the collection. void AddObject([In, MarshalAs(UnmanagedType.IUnknown)] object punk); /// Adds the objects contained in an IObjectArray to the collection. /// Pointer to the IObjectArray whose contents are to be added to the collection. void AddFromArray(IObjectArray poaSource); /// Removes a single, specified object from the collection. /// A pointer to the index of the object within the collection. void RemoveObjectAt(uint uiIndex); /// Removes all objects from the collection. void Clear(); } } }