Приведение универсального объекта к типу com-класса завершается неудачно

У меня есть COM-класс, который зарегистрирован в ROT, через другое приложение я извлекаю экземпляр моего com-класса из ROT и приводю его к его типу, что приводит к следующей ошибке.

Невозможно привести объект COM типа "System.__ComObject" к типу интерфейса "ROTViewer.IHandleVIParentInfo". Эта операция завершилась неудачно, поскольку вызов QueryInterface для компонента COM для интерфейса с IID '{C4B3F18E-FDF1-3F0C-A6DB-F03B302CAE9F}' завершился неудачно из-за следующей ошибки: такой интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)),

Ниже приведена моя реализация класса COM

public interface IHandleVIParentInfo
  {
      Dictionary<int, string> ContainerParentredVi {get; set;}
      int GetListCount();
  }

  [ComVisible(true)]
  [ClassInterface(ClassInterfaceType.None)]
  [ComSourceInterfaces(typeof(IHandleVIParentInfo))]
  [ProgIdAttribute(&quot;Qcs.VIParentedInfoHandler&quot;)]
  [GuidAttribute(HandleVIParentedInfo.Guid)]
  [DisplayName(&quot;Qcs VI Parented Info Handler&quot;)]
  public class HandleVIParentedInfo : IDisposable, IHandleVIParentInfo
  {
      public const string Guid = &quot;CB6BFC97-F8E3-4fce-B68B-4D01485811A1&quot;;
      public Dictionary&lt;int, string&gt; ContainerParentredVi
      {
          get
          {
              return _containerParentredVi;
          }
          set
          {
              _containerParentredVi = value;
          }
      }
      private Dictionary&lt;int, string&gt; _containerParentredVi = new Dictionary&lt;int, string&gt;();
      public HandleVIParentedInfo()
      {
          //private Dictionary&lt;int, string&gt; _containerParentredVi = new Dictionary&lt;int, string&gt;();
      }

      #region IDisposable Members

      void IDisposable.Dispose()
      {
          throw new NotImplementedException();
      }

      #endregion

      #region IHandleVIParentInfo Members

      int IHandleVIParentInfo.GetListCount()
      {
          return ContainerParentredVi.Count;
      }

      #endregion

Ниже приведен метод, где я использую приведение типа к моему типу класса com

public static void GetIDEInstances()
        {
            instances = new List<object>();
            Hashtable runningStationInstances = new Hashtable();
            Hashtable runningObjects = GetROTContent();


            object expectedObj;
            //runningObjects["!{5EB461D8-71CD-4E78-A360-4CE788A93063}"].GetHashCode();
            IDictionaryEnumerator rotEnumerator = runningObjects.GetEnumerator();
            while (rotEnumerator.MoveNext())
            {
                string candidateName = (string)rotEnumerator.Key;
                if (string.Compare(candidateName,"!{CB6BFC97-F8E3-4fce-B68B-4D01485811A1}",true)==0)
                {

                    viParenting = (IHandleVIParentInfo)rotEnumerator.Value;


                }
            }
}

получение ошибки в строке "viParenting = (IHandleVIParentInfo)rotEnumerator.Value;"

0 ответов

Другие вопросы по тегам