.NETでキャッチSENSのイベント、なしのGuid属性
質問
私は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
を発行します。
これが、お役に立てば幸い 宜しくお願いします、 トムます。