Frage

Hat jemand geschafft, dies zu tun?Ich habe versucht, einen verwalteten wrapper-Klasse für IPropertyStore aber bin immer AccessViolationExceptions auf die Methoden (d.h.IPropertyStore::GetValue), die einen Zeiger auf PROPVARIANT (angezeigt als MarshalAs(UnmanagedType.Struct) out-parameter in meinem managed-version) Wohl mein Verständnis von COM-und interop-unzureichend --- ich bin mir nicht sicher, ob die Probleme in meinem struct PROPVARIANT Erklärung (derzeit nur verwendet StructLayout.Sequentielle, erklärt eine Sequenz von bytes, und manuell manipuliert die bytes zu erhalten Werte der verschiedenen Arten in der union etc.), COM Probleme mit der was-Prozess besitzt, was, oder etwas anderes.Ich habe versucht, verschiedene andere Versionen der PROPVARIANT wie die Verwendung von StructLayout.Explizit für die Gewerkschaften, nichts hat geklappt.Abrufen PROPERTYKEYs mit IPropertyStore::GetAt --- erklärt nativ als einen Zeiger auf PROPERTYKEY und der als out-parameter meinem eigenen StructLayout.Sequentielle PROPERTYKEY in meiner wrapper - - - - funktioniert gut, übrigens.

War es hilfreich?

Lösung

Sie sollten überprüfen, http://code.msdn.microsoft.com/WindowsAPICodePack .Es hat Unterstützung für die Verwendung der Windows-Property-System, und ein paar andere windows-shell-Funktionen.Ich denke, es ist genau das, was Sie suchen.

Andere Tipps

Nun, hier ist die version aus MS.Internal.Interop (eine Fundgrube des Wissens):

[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
}

Diese Definitionen wird Ihnen helfen, stellen Sie sicher, Ihre Strukturen sind zumindest korrekt.Wie für Ihre anderen Probleme, die ich nicht beantworten kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top