Вопрос

я следую эта статья Для регистрации событий Sens через COM, но я думаю, что что -то упускаю. Я называю метод подписки, в статье, в статье говорится, как это:

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 (по крайней мере, насколько я могу судить):

[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

Я понял. Я передавал тип (Senslogon) в EventyStemRegistrar.subscribeToevents, когда я должен был проходить тип (Isenslogon) (у Isenslogon действительно есть руководство по нему). Я такой глупый.

Другие советы

Я думаю, что ваш код небезопасен, потому что вы предполагаете призыв 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, посмотрите на идентификатор Typelib ... если их нет, то выпустите это regsvr32 ess.dll Где когда-либо файл DLL находится в текущей папке.

Надеюсь, это поможет, с уважением, Том.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top