IShellFolder::GetAttributesOf
の最後の引数はマスクにも使われるので戻り値に移動できない。
C#でWin32 APIのIShellFolder::GetAttributesOf
メソッドを利用する場合は戻り値をvoid
(エラーを手動処理する場合はint
)型にします。他のメソッドのように最後の引数を戻り値にすると、マスクを与えられずに戻り値が想定外(主に0)となります。
例外処理を自動化して複数のIDリストを渡す場合。
void GetAttributesOf( uint cidl, [In][MarshalAs(UnmanagedType.LPArray)] IntPtr[] apidl, ref SFGAOF rgfInOut);
例外処理を自動化して1つのIDリストしか渡さない場合。
void GetAttributesOf( uint cidl, ref IntPtr apidl, ref SFGAOF rgfInOut);
上記のコードでは以下の点に注意しています。
GetAttributesOf
の最後の引数は入力がマスクとして利用される。次の定義を使うとマスクが常に0となり、戻り値も常に0になる。
SFGAOF GetAttributesOf( uint cidl, ref IntPtr apidl);
IntPtr[]
はMarshalAs(UnmanagedType.LPArray)
でC形式の配列であることを知らせる。省略時はSAFEARRAY
扱いされて異常なデータが渡される。