none
Неявное преобразование типа object C# RRS feed

  • Общие обсуждения

  • Я пытаюсь управлять CAD системой PowerSHAPE через библиотеку PowerSolutionDOTNetOLE. В примере был показан один метод интеграции:

    {
    	PSHAPE.Connect();
    	PSHAPE.ReconnectToActiveDocument();
    	DOC = PSHAPE.DOCOLE;
    }

    Где PSHAPE это объект (object). В примере говориться что так приемлимо. Но у меня студия ругаеться на то что я не могу неявно преобразовать object (PSHAPE) в PowershapeNT.Document (DOC).

    namespace PowershapeNT
    {
        [CoClass(typeof(DocumentClass))]
        [Guid("EE512752-ABC0-11D2-83DB-000000000000")]
        public interface Document : IPshapeModelDoc
        {
        }

    }

    namespace PowershapeNT
    {
        [Guid("EE512752-ABC0-11D2-83DB-000000000000")]
        [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
        [TypeLibType(TypeLibTypeFlags.FDispatchable)]
        public interface IPshapeModelDoc
         {

    //Различные методы.

    }

    }

    Что можете посоветовать?


    11 июня 2013 г. 11:03

Все ответы

  • Можно использовать явное преобразование типов или dynamic, вот только не очень понятно, что и во что надо преобразовывать?
    11 июня 2013 г. 11:53
    Модератор
  • PSHAPE.DOCOLE - это объект, в нем храниться активное окно в CAD системе.

    Я его и передаю для того что бы, потом работать с ним в DOC.

    Невозможно привести COM-объект типа "System.__ComObject"

    к интерфейсному типу "PowershapeNT.Document".

    Операция завершилась со сбоем, поскольку вызов QueryInterface

    COM-компонента для интерфейса

    с IID "{EE512752-ABC0-11D2-83DB-000000000000}"

    возвратил следующую ошибку: Интерфейс не поддерживается

    (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).

    вот как ругается на

    DOC = PSHAPE.DOCOLE;

    • Изменено YatajgaEditor 12 июня 2013 г. 5:45 Formatting
    11 июня 2013 г. 12:11
  • А вы пытались явно привести его к этому типу, если явное преобразование возможно конечно.

    DOC = (PowershapeNT.Document)PSHAPE.DOCOLE;

    12 июня 2013 г. 5:49
    Модератор
  • Пытался. пишет что невозможно сослаться на не существующий объект
    12 июня 2013 г. 7:00
  • Да, работать с интерфейсами COM – одна головная боль. Вам удалось решить проблему? Если да, то будет здорово поделиться решением проблемы, оно может пригодиться другим.
    16 июня 2013 г. 19:40
    Модератор
  • Увы, но пока еще не решил эту проблему. Как решу обязательно выложу решение. 
    17 июня 2013 г. 5:03