Неужели кому-нибудь удалось это сделать? Я попытался создать класс управляемых оболочек для IPropertyStore, но получаю AccessViolationExceptions для методов (например, IPropertyStore :: GetValue), которые берут указатель на PROPVARIANT (отображаемый как параметр MarshalAs (UnmanagedType.Struct) в моей управляемой версии). Возможно, мое понимание COM и interop неадекватны --- Я не уверен, что проблемы в моем объявлении структуры PROPVARIANT (который в настоящее время просто использует StructLayout.Sequential, объявляет последовательность байтов и вручную манипулирует байтами для получения значений различных типов в профсоюз и т. д.), проблемы COM с каким процессом принадлежит то, что или что-то еще. Я пробовал другие версии PROPVARIANT, такие как использование StructLayout.Explicit для профсоюзов, ничего не сработало. Получение PROPERTYKEYs с помощью IPropertyStore :: GetAt ---, который объявлен изначально как принимающий указатель на PROPERTYKEY и имеющий параметр out из моего собственного StructLayout.Sequential PROPERTYKEY в моей обертке --- отлично работает, кстати.Получение свойств Vista/Windows Search/propsys.dll из оболочки в управляемом коде
1
A
ответ
1
Вы должны зарегистрироваться http://code.msdn.microsoft.com/WindowsAPICodePack. Он поддерживает использование системы свойств Windows и множество других возможностей оболочки Windows. Я думаю, это именно то, что вы ищете.
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
}
Эти определения помогут вам убедиться, что ваши структуры, по крайней мере, правильно. Что касается ваших других проблем, у меня нет ответа.
К сожалению, этого не было, когда я изначально спросил, но это определенно путь. – 2010-07-14 23:07:39