Frage

Ich folge Dieser Artikel Um Senszenereignisse über COM zu registrieren, aber ich denke, mir fehlt etwas. Ich rufe die Abonnement -Methode auf, in der der Artikel wie folgt schreibt:

EventSystemRegistrar.SubscribeToEvents("ManagedSENS EventSubscriber", "ManagedSENS.SensLogonInterop", subscriptionViewerID, this, typeof(SensLogon));

Was dazu führt, dass diese Methode aufgerufen wird:

private static String GetInterfaceGuid(Type type)
{
    Object[] attributes = type.GetCustomAttributes(typeof(GuidAttribute), true);

    return String.Format("{{{0}}}", ((GuidAttribute)attributes[0]).Value);
}

Das Problem ist, dass der Typ, der dort die SensLogon -Klasse gibt, die sie mit dem Schreiben raten, aber keine Attribute drauf haben, sodass die Methode eine Ausnahme ausgelöst hat. Die einzigen Attribute, die in der Tat Leitfaden sind, sind in diesen Klassen zu schreiben, die nichts mit der Senslogon -Klasse zu tun haben (zumindest wie ich sagen kann):

[ComImport, Guid("4E14FBA2-2E22-11D1-9964-00C04FBBB345")]
class EventSystem { }
[ComImport, Guid("7542E960-79C7-11D1-88F9-0080C7D771BF")]
class EventSubcription { }
[ComImport, Guid("AB944620-79C6-11d1-88F9-0080C7D771BF")]
class EventPublisher { }
[ComImport, Guid("cdbec9c0-7a68-11d1-88f9-0080c7d771bf")]
class EventClass { }

Vielleicht fehlt mir hier etwas? Soll ich aus diesen Klassen abgeben oder so? Die Senslogon -Klasse wird gezeigt, aber keine dieser Attribute hat.

Hat jemand etwas Ähnliches getan, um sich bei COM -Veranstaltungen zu registrieren oder vielleicht zu sehen, wo ich dem Artikel nicht ordnungsgemäß verfolgt habe?

War es hilfreich?

Lösung 2

Ich habe es herausgefunden. Ich habe Typof (Senslogon) in EventSystemregistrar übergeben. Wie dumm von mir.

Andere Tipps

Ich denke, Ihr Code ist unsicher, weil Sie den Anruf annehmen type.GetCustomAttributes(...) arbeitete ohne zu überprüfen ... ich würde das in a einwickeln try/catch Block, um zu sehen, was passiert ... und die Ausnahme inspizieren ...

private static String GetInterfaceGuid(Type type) 
{ 
    string sGuid = string.Empty;
    try{
        Object[] attributes = type.GetCustomAttributes(typeof(GuidAttribute), true); 
        if (attributes != null && attributes.Length >= 1){
           sGuid = String.Format("{{{0}}}", ((GuidAttribute)attributes[0]).Value); 
        }else{
           // FAIL!
        }
    }catch(System.Exception up){
        throw up;
    }
    return sGuid;
} 

Tat das ess.dll überhaupt registrieren? Sie müssen es möglicherweise manuell registrieren? Überprüfen Sie die Registrierung für die Klassen -ID unter hkey_classes_root und schauen Sie sich die Typelib -ID an ... wenn sie nicht da sind, dann geben Sie diese aus regsvr32 ess.dll Wo immer die DLL-Datei im aktuellen Ordner befindet.

Hoffe das hilft, am besten, Tom.

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