0

この記事に従って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 クラスの記述が推奨されているタイプですが、属性がないため、メソッドが例外をスローすることです。実際、GuidAttributes である唯一の属性は、SensLogon クラスとは何の関係もないこれらのクラスにあると言われています (少なくとも私が知る限り)。

[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 イベントに登録するのに似たようなことをした人はいますか? あるいは、私がどこで記事を不適切にフォローしたかを確認できますか?

4

2 に答える 2

1

への呼び出しがチェックせずに機能したと想定しているため、コードは安全ではないと思います....これを/ブロックtype.GetCustomAttributes(...)でラップして、何が起こっているかを確認します...そして例外を調べます...trycatch

private static String GetInterfaceGuid(Type type)
{
    文字列 sGuid = string.Empty;
    試す{
        Object[] 属性 = type.GetCustomAttributes(typeof(GuidAttribute), true);
        if (attributes != null && attributes.Length >= 1){
           sGuid = String.Format("{{{0}}}", ((GuidAttribute)attributes[0]).Value);
        }そうしないと{
           // 不合格!
        }
    }catch(System.Exception アップ){
        吐く;
    }
    sGuid を返します。
}

ess.dll登録されましたか?手動で登録する必要がありますか?HKEY_CLASSES_ROOT の下にあるこれらのクラス ID のレジストリを確認し、typelib ID を調べます...そこにない場合はregsvr32 ess.dll、dll ファイルが現在のフォルダーにある場所でこれを発行します。

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

于 2010-02-16T00:45:19.093 に答える
0

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

于 2010-02-16T01:22:53.310 に答える