有没有人能够做到这一点?我试图使为IPropertyStore托管的包装类,但我对拿(在我的托管版本呈现为的MarshalAs(UnmanagedType.Struct)输出参数)的指针PROPVARIANT的方法(即IPropertyStore ::的GetValue)获得AccessViolationExceptions可能是我的理解COM互操作和不足---我不知道,如果问题在我PROPVARIANT结构声明(目前只是使用StructLayout.Sequential,声明字节序列,并手动操纵字节来获得各种类型的值工会等),COM问题与哪些进程拥有什么,还是其他什么东西。我已经试过PROPVARIANT的其他各种版本,如使用StructLayout.Explicit对工会,什么也没有奏效。检索与IPropertyStore :: GetAt ---这是原生宣布为采用指针来PROPERTYKEY并在我的包装有自己StructLayout.Sequential PROPERTYKEY的输出参数---工作得很好,顺便PROPERTYKEYs。

有帮助吗?

解决方案

您应该检查 http://code.msdn.microsoft.com/WindowsAPICodePack 。它有消耗的Windows产权制度的支持,和一堆其他的Windows外壳程序的能力。我认为这是你在寻找什么。

其他提示

嗯,这里是从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
}

这些定义将帮助您确保您的结构至少是正确的。至于你的其他问题,我没有答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top