Плагин C# для COM API приложения
От: lapkos  
Дата: 17.08.07 12:31
Оценка:
Всем привет.

Ситуация следующая:

1. Существует CAD приложение с API основаном на COM.

2. На C# я написал class library в каторой создал класс реализующий
нужный мне COM интерфейс который позволяет коечто делать в вышеупосянутым
CAD приложении. И зарегистрировал этот класс как COM'овский.

3. На C# написал приложение которое должно создавать
экземпляр описанного в пункте 2 класса и вызывать его методы.


В чём проблема:

Экземпляр описанного в пункте 2 класса должен создаваться как
COM объект(ну всмысле обёрнут), чтобы CAD приложение могло его юзать.

При разработке приложения описанного в п.3 пытаюсь добавит
референс на свою COM библиатеку, но студия не даёт мне
это сделать (говорит юзай её как сборку).
Я её юзаю как сборку, но при этом плагинчик не работает.


Хотелось бы узнать природу явления?

Помогите плиз.

Зарание спасибо.
Re: Плагин C# для COM API приложения
От: TK Лес кывт.рф
Дата: 17.08.07 13:19
Оценка:
Здравствуйте, 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.
В чём собственно выражается неработоспособность плагина?
Re[2]: Плагин C# для COM API приложения
От: lapkos  
Дата: 17.08.07 14:07
Оценка:
Здравствуйте, 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'.
Re[2]: Плагин C# для COM API приложения
От: lapkos  
Дата: 17.08.07 14:09
Оценка:
Здравствуйте, Аноним, Вы писали:

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'.
Re[3]: Плагин C# для COM API приложения
От: TK Лес кывт.рф
Дата: 17.08.07 14:23
Оценка:
Здравствуйте, lapkos, Вы писали:

L>Ну короче исключение возникает здесь:


L>CimPickToolImplCSharp pPickTool = new CimPickToolImplCSharp(); //Создаю экземпляр плагиновского класса

L>pPickTool.SetSelectionFilter(iEnttFilter, iNumberEntts); //Вызываю нужный метод этого класса
L>CimBaseAPILib.Tool tool = (CimBaseAPILib.Tool)pPickTool; //Пробую преобразовать и трындец

Уверены, что должно быть CimBaseAPILib.Tool, а не CimBaseAPILib.ITool? т.е. вы 100% кастите экземпляр к интерфейсу?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Плагин C# для COM API приложения
От: lapkos  
Дата: 17.08.07 14:34
Оценка:
Здравствуйте, 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% кастите экземпляр к интерфейсу?


Да, уверен. Это 100% интерфейс.
Re[5]: Плагин C# для COM API приложения
От: TK Лес кывт.рф
Дата: 17.08.07 14:42
Оценка:
Здравствуйте, lapkos, Вы писали:

TK>>Уверены, что должно быть CimBaseAPILib.Tool, а не CimBaseAPILib.ITool? т.е. вы 100% кастите экземпляр к интерфейсу?

L>Да, уверен. Это 100% интерфейс.

Тогда, есть два варианта — 1. этот интерфейс не реализован 2. Загрузились два разных объявления одного и того-же интерфейса (например, одна сборка загрузилась из разных мест)
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[6]: Плагин C# для COM API приложения
От: lapkos  
Дата: 17.08.07 15:05
Оценка:
Здравствуйте, TK, Вы писали:

TK>Здравствуйте, lapkos, Вы писали:


TK>>>Уверены, что должно быть CimBaseAPILib.Tool, а не CimBaseAPILib.ITool? т.е. вы 100% кастите экземпляр к интерфейсу?

L>>Да, уверен. Это 100% интерфейс.

TK>Тогда, есть два варианта — 1. этот интерфейс не реализован 2. Загрузились два разных объявления одного и того-же интерфейса (например, одна сборка загрузилась из разных мест)


Я думал что проблема в том что одновременно с "обёрнутым в COM" нетовским объектом одновременно работают нетовское и "обычное" приложения.
Т.е. вы думаете что не существует принципиальной проблемы взаимодействия?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.