获得VISTA / Windows搜索/ propsys.dll性质从托管代码中壳
-
19-08-2019 - |
题
有没有人能够做到这一点?我试图使为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
}
这些定义将帮助您确保您的结构至少是正确的。至于你的其他问题,我没有答案。
不隶属于 StackOverflow