質問

私はCOM経由でSENSイベントを登録するには、この記事を以下のよ、しかし、私は何かが欠けていると思います。

:私はこのように、記事を書くために言うSubscribeToEventsメソッドを呼び出しています
EventSystemRegistrar.SubscribeToEvents("ManagedSENS EventSubscriber", "ManagedSENS.SensLogonInterop", subscriptionViewerID, this, typeof(SensLogon));

この方法につながると呼ば取得ます:

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

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

問題は、SensLogonクラスがあるタイプは、彼らが書いて助言されていますが、メソッドが例外をスローするように、それは、それに属性はありません。 SensLogonクラス(少なくとも私の知る限り)とは何の関係もない、実際には、GuidAttributesは、彼らが書くこと言っている属性のみ、これらのクラスにあり、ます:

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

おそらく、私はここで何かが欠けていますか?私は、これらのクラスか何かから派生しましたか? SensLogonクラスが示されているが、それはこれらの属性のいずれかを持っていません。

は、誰もがCOMイベントに登録すると同様のものを行っている、または、おそらく、私が不適切な記事を追ってきた場所を見ることができますか?

役に立ちましたか?

解決 2

私はそれを考え出しました。私は(ISensLogonが実際にそれにGuidAttributeを持っていない)typeof演算(ISensLogon)を通過されている必要があるときに、EventSystemRegistrar.SubscribeToEventsにtypeof演算(SensLogon)を渡しました。愚かな私。

他のヒント

私は...何が起こっているか確認するためにtype.GetCustomAttributes(...) / tryブロックでこれをラップし、例外を検査します....あなたは確認せずに働いたcatchの呼び出しを想定しているので、あなたのコードは、安全ではないと思います...

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

ess.dllは全く登録されたのですか?あなたはそれを手動で登録する必要がありますか? HKEY_CLASSES_ROOTの下で、これらのクラスIDのためにレジストリをチェックし、タイプライブラリのIDを見て...彼らが存在しない場合、その後のdllファイルは現在のフォルダに配置されている場所、今までにこのregsvr32 ess.dllを発行します。

これが、お役に立てば幸い 宜しくお願いします、 トムます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top