Невозможно привести COM-объект к типу интерфейса - PullRequest
0 голосов
/ 05 марта 2019

У меня есть DLL, которая используется сторонним приложением.Я пытаюсь запустить долго выполняющуюся задачу как асинхронную, которая не работает из-за ошибки: -

"Невозможно привести объект COM типа" System .__ ComObject "к типу интерфейса" IMSRelation.IJAssocRelation ".Эта операция завершилась неудачно, поскольку вызов QueryInterface для компонента COM для интерфейса с IID '{609567C0-4ED3-11D1-B2B9-080036024603}' не выполнен из-за следующей ошибки: такой интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)). "

Код ошибки: -

businessObject.Relationships

, где businessObject имеет тип BusinessObject, код для которого

public class BusinessObject
{

    protected internal BusinessObject();

    protected internal BusinessObject(PrivateBusinessObject oBOP);

    public ReadOnlyCollection<RelationCollection> Relationships { get; }
}

Примечание: - Это прекрасно работает, если я не использую его внутри (Async / Await или внутри нового потока) других процессов. До сих пор я смотрел на то, что компоненты COM необходимо маршалировать перед их использованием внутри.NET Framework.

Так может кто-нибудь подсказать, как его маршалировать, поскольку BusinessObject Class не реализует какой-либо интерфейс [Согласно моему пониманию, маршалировать могут только интерфейсы, поправьте меня, если я ошибаюсь].

Теперь очевидноBusinessObject - это Root Element, и другие классы реализуют его, и эти классы реализуют интерфейсы, из которых осуществляется доступ к Relationships.

Итак, мне нужно получить тот конкретный интерфейс, из которого мне нужно найти отношение, и его маршалировать ??Пожалуйста, предложите решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...