1. Существует CAD приложение с API основаном на COM.
2. На C# я написал class library в каторой создал класс реализующий
нужный мне COM интерфейс который позволяет коечто делать в вышеупосянутым
CAD приложении. И зарегистрировал этот класс как COM'овский.
3. На C# написал приложение которое должно создавать
экземпляр описанного в пункте 2 класса и вызывать его методы.
В чём проблема:
Экземпляр описанного в пункте 2 класса должен создаваться как
COM объект(ну всмысле обёрнут), чтобы CAD приложение могло его юзать.
При разработке приложения описанного в п.3 пытаюсь добавит
референс на свою COM библиатеку, но студия не даёт мне
это сделать (говорит юзай её как сборку).
Я её юзаю как сборку, но при этом плагинчик не работает.
Здравствуйте, lapkos, Вы писали:
L>это сделать (говорит юзай её как сборку). L>Я её юзаю как сборку, но при этом плагинчик не работает.
L>Хотелось бы узнать природу явления?
т.е. было сделано два проекта — плагин и приложение его использующее. И при этом плагин не работает?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Плагин C# для COM API приложения
От:
Аноним
Дата:
17.08.07 13:24
Оценка:
L>При разработке приложения описанного в п.3 пытаюсь добавит L>референс на свою COM библиатеку, но студия не даёт мне L>это сделать (говорит юзай её как сборку). L>Я её юзаю как сборку, но при этом плагинчик не работает.
Понятно, что не дает. Ты же создаешь не настоящий COM объект, а только .NET assembly, которая видна CAD объекту как COM, а весь код исполняется на виртуальной машине .NET.
В чём собственно выражается неработоспособность плагина?
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, lapkos, Вы писали:
L>>это сделать (говорит юзай её как сборку). L>>Я её юзаю как сборку, но при этом плагинчик не работает.
L>>Хотелось бы узнать природу явления?
TK>т.е. было сделано два проекта — плагин и приложение его использующее. И при этом плагин не работает?
Да. Я создаю экземпляр плагиновского класса и пытаюсь эту ссылку приобразовать в
ссылку на интерфейс, который я реализовал в плагине (для того чтобы передать её в методе другого COM объекта).
Ну короче исключение возникает здесь:
CimPickToolImplCSharp pPickTool = new CimPickToolImplCSharp(); //Создаю экземпляр плагиновского класса
pPickTool.SetSelectionFilter(iEnttFilter, iNumberEntts); //Вызываю нужный метод этого класса
CimBaseAPILib.Tool tool = (CimBaseAPILib.Tool)pPickTool; //Пробую преобразовать и трындец
Выдает сообщение:
An unhandled exception of type 'System.InvalidCastException' occurred in SketcherCS.exe
Additional information: Unable to cast
object of type 'CimPickToolCSharp.CimPickToolImplCSharp' to type 'CimBaseAPILib.Tool'.
Здравствуйте, Аноним, Вы писали:
L>>При разработке приложения описанного в п.3 пытаюсь добавит L>>референс на свою COM библиатеку, но студия не даёт мне L>>это сделать (говорит юзай её как сборку). L>>Я её юзаю как сборку, но при этом плагинчик не работает.
А>Понятно, что не дает. Ты же создаешь не настоящий COM объект, а только .NET assembly, которая видна CAD объекту как COM, а весь код исполняется на виртуальной машине .NET. А>В чём собственно выражается неработоспособность плагина?
Я создаю экземпляр плагиновского класса и пытаюсь эту ссылку приобразовать в
ссылку на интерфейс, который я реализовал в плагине
Ну короче исключение возникает здесь:
CimPickToolImplCSharp pPickTool = new CimPickToolImplCSharp(); //Создаю экземпляр плагиновского класса
pPickTool.SetSelectionFilter(iEnttFilter, iNumberEntts); //Вызываю нужный метод этого класса
CimBaseAPILib.Tool tool = (CimBaseAPILib.Tool)pPickTool; //Пробую преобразовать и трындец
Выдает сообщение:
An unhandled exception of type 'System.InvalidCastException' occurred in SketcherCS.exe
Additional information: Unable to cast
object of type 'CimPickToolCSharp.CimPickToolImplCSharp' to type 'CimBaseAPILib.Tool'.
Здравствуйте, lapkos, Вы писали:
L>Ну короче исключение возникает здесь:
L>CimPickToolImplCSharp pPickTool = new CimPickToolImplCSharp(); //Создаю экземпляр плагиновского класса L>pPickTool.SetSelectionFilter(iEnttFilter, iNumberEntts); //Вызываю нужный метод этого класса L>CimBaseAPILib.Tool tool = (CimBaseAPILib.Tool)pPickTool; //Пробую преобразовать и трындец
Уверены, что должно быть CimBaseAPILib.Tool, а не CimBaseAPILib.ITool? т.е. вы 100% кастите экземпляр к интерфейсу?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, lapkos, Вы писали:
L>>Ну короче исключение возникает здесь:
L>>CimPickToolImplCSharp pPickTool = new CimPickToolImplCSharp(); //Создаю экземпляр плагиновского класса L>>pPickTool.SetSelectionFilter(iEnttFilter, iNumberEntts); //Вызываю нужный метод этого класса L>>CimBaseAPILib.Tool tool = (CimBaseAPILib.Tool)pPickTool; //Пробую преобразовать и трындец
TK>Уверены, что должно быть CimBaseAPILib.Tool, а не CimBaseAPILib.ITool? т.е. вы 100% кастите экземпляр к интерфейсу?
Здравствуйте, lapkos, Вы писали:
TK>>Уверены, что должно быть CimBaseAPILib.Tool, а не CimBaseAPILib.ITool? т.е. вы 100% кастите экземпляр к интерфейсу? L>Да, уверен. Это 100% интерфейс.
Тогда, есть два варианта — 1. этот интерфейс не реализован 2. Загрузились два разных объявления одного и того-же интерфейса (например, одна сборка загрузилась из разных мест)
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, lapkos, Вы писали:
TK>>>Уверены, что должно быть CimBaseAPILib.Tool, а не CimBaseAPILib.ITool? т.е. вы 100% кастите экземпляр к интерфейсу? L>>Да, уверен. Это 100% интерфейс.
TK>Тогда, есть два варианта — 1. этот интерфейс не реализован 2. Загрузились два разных объявления одного и того-же интерфейса (например, одна сборка загрузилась из разных мест)
Я думал что проблема в том что одновременно с "обёрнутым в COM" нетовским объектом одновременно работают нетовское и "обычное" приложения.
Т.е. вы думаете что не существует принципиальной проблемы взаимодействия?