[ComImport]
[Guid("0000000d-0000-0000-C000-000000000046")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IEnumSTATSTG
{
// The user needs to allocate an STATSTG array whose size is celt.
[PreserveSig]
uint
Next(
uint celt,
[MarshalAs(UnmanagedType.LPArray), Out]
STATSTG[] rgelt,
out uint pceltFetched
);
void Skip(uint celt);
void Reset();
[return:MarshalAs(UnmanagedType.Interface)]
IEnumSTATSTG Clone();
}
IEnumSTATSTG enumerator = ... ;
STATSTG s = new STATSTG[1];
uint r;
while( e.Next(1, s, out r) == 0 )
{
// Maniputlate s[0];
}
This is a good example on how to marshal IEnumXXX interfaces.