誰かがこれを行うことができましたか?IPropertyStore のマネージ ラッパー クラスを作成しようとしましたが、PROPVARIANT へのポインターを受け取るメソッド (IPropertyStore::GetValue) で AccessViolationExceptions を取得しています (マネージ バージョンで MarshalAs(UnmanagedType.Struct) 出力パラメーターとしてレンダリングされます) おそらく私の理解COM と相互運用性が不十分です --- PROPVARIANT 構造体宣言に問題があるかどうかはわかりません (現在、StructLayout.Sequential を使用し、バイトのシーケンスを宣言し、バイトを手動で操作して、さまざまな型の値を取得しています)ユニオンなど)、どのプロセスが何を所有しているか、または何か他のものをCOMが発行します。ユニオンに StructLayout.Explicit を使用するなど、他のさまざまなバージョンの PROPVARIANT を試しましたが、何も機能しませんでした。IPropertyStore:: による PROPERTYKEY の取得
1009 次
2 に答える
1
http://code.msdn.microsoft.com/WindowsAPICodePackを確認する必要があります。これは、Windowsプロパティシステムの使用、およびその他のWindowsシェル機能の束をサポートしています。まさにあなたが探しているものだと思います。
于 2010-07-13T01:35:17.980 に答える
1
さて、これがMS.Internal.Interop
(知識の宝庫)からのバージョンです:
[StructLayout(LayoutKind.Sequential), FriendAccessAllowed]
internal struct PROPVARIANT
{
internal VARTYPE vt;
internal ushort wReserved1;
internal ushort wReserved2;
internal ushort wReserved3;
internal PropVariantUnion union;
}
[FriendAccessAllowed]
internal enum VARTYPE : short
{
VT_BSTR = 8,
VT_FILETIME = 0x40,
VT_LPSTR = 30,
// etc...
}
[StructLayout(LayoutKind.Explicit), FriendAccessAllowed]
internal struct PropVariantUnion
{
[FieldOffset(0)]
internal BLOB blob;
[FieldOffset(0)]
internal short boolVal;
// etc... see MS.Internal.Interop for full definition
}
これらの定義は、構造が少なくとも正しいことを確認するのに役立ちます。あなたの他の問題については、私には答えがありません。
于 2008-12-06T03:00:24.897 に答える