1

誰かがこれを行うことができましたか?IPropertyStore のマネージ ラッパー クラスを作成しようとしましたが、PROPVARIANT へのポインターを受け取るメソッド (IPropertyStore::GetValue) で AccessViolationExceptions を取得しています (マネージ バージョンで MarshalAs(UnmanagedType.Struct) 出力パラメーターとしてレンダリングされます) おそらく私の理解COM と相互運用性が不十分です --- PROPVARIANT 構造体宣言に問題があるかどうかはわかりません (現在、StructLayout.Sequential を使用し、バイトのシーケンスを宣言し、バイトを手動で操作して、さまざまな型の値を取得しています)ユニオンなど)、どのプロセスが何を所有しているか、または何か他のものをCOMが発行します。ユニオンに StructLayout.Explicit を使用するなど、他のさまざまなバージョンの PROPVARIANT を試しましたが、何も機能しませんでした。IPropertyStore:: による PROPERTYKEY の取得

4

2 に答える 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 に答える