Подключение библиотеки ActiveX к компасу версии 16 или 14

Автор Elisey Afanasjev, 28.03.19, 12:19:31

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Elisey Afanasjev

Суть вопроса в том, что библиотека безупречно работает на том компьютере, где она была написана. А написана она на c#. Я прошарил достаточно большое кол-во "интернетов" и посмотрел много информации о том, как устанавливать и внедрять эти библиотеки. Но всё также не выходит установить её на другом ПК. Работает она на Windows64, а на компасе как 32, так и 64 версии, 14 и 16 годов соответственно.

Сам алгоритм выглядит следующим образом:

1. Создание самого проекта в Visual Studio (В моём случае) проекта библиотеки.

2. Удаление стандартного класса Class1.cs и добавление своего класса

3. Также необходимо добавить класс ldefin2d.cs, который находится в каталоге "...\SDK\C#\Common\KAPITypes". (Или любой другой класс из SDK), этого я толком не понял, если честно.

4. В свойствах проекта (самой сборки в visual studio) нам нужна вкладка Application (Приложение), а на странице этой вкладки Assembly Information (Информация о сборке). Там нужно сделать сборку видимой для среды COM. Галка находится в самом низу страницы, по идее везде так.

5. В тех же свойствах проекта нужно открыть вторую вкладку Build (Построение(по идее)). В самом верху будет выпадающий список, содержащий способы построения проекта. Выберете Release.

6. На той же вкладке, что описывалась в предыдущем пункте в нижней части страницы находятся настройки вывода, там есть галочка Register for COM interop (Регистрация для COM), её также необходимо активировать.

7. С настройками сборки мы закончили, следующий этап - добавление необходимых библиотек в сам проект. В обозревателе решений (Solution Explorer) в Visual Studio (Обычно справа) выберете References(Ссылки) #правой кнопкой мыши/добавить ссылку# в самом низу есть вкладка Browse(Обзор) на ней тоже есть кнопка Browse. Нажимаем на неё, переходим в каталог используемого компаса, затем переходим по пути "...\SDK\C#\Common\" и добавляем все необходимые нам библиотеки. Обычно хватает библиотек KAPItypes и Kompas6API5.

8. Сам код в приложении

9. После приведения кода к виду, что в приложении я зарегистрировал библиотеку в реестре компьютера с помощью программы RegAsm.exe.
Делается это в командной строке и выглядит следующим образом:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe "Здесь непосредственно сам путь и сама библиотека"

Проделав этот алгоритм действий, моя библиотека заработала когда-то, сейчас же ничего не выходит и я не могу понять почему.

Молю о помощи, если это возможно :`(  :(((

once

Есть проблема подключения ActiveX библиотек для Компас х64, библиотека зарегистрированная как com видна на вкладке ActiveX только при запуске Компас с админскими правами. Для себя эту проблему я решил так, просто сделал эту библиотеку автоматически подключаемой при старте Компас, т.е. библиотекой AddIn. Как зарегистрировать таким образом библиотеку описано в sdk, просто прописать определенный ключ в реестре.
+ Благодарностей: 1

once

Для регистрации в винде х64 путь к регасму другой, там папка framework64. И можно добавить параметр codebase при регистрации.
+ Благодарностей: 2

Elisey Afanasjev

Цитата: once от 28.03.19, 12:41:19
Для регистрации в винде х64 путь к регасму другой, там папка framework64. И можно добавить параметр codebase при регистрации.
Можно или нужно? и для чего это нужно? Я так и не понял, когда добавил этот параметр.

once

Я регистрирую с этим параметром. В подробности этого параметра не вдавался, это задание базы кода в реестре.

Elisey Afanasjev

Цитата: once от 28.03.19, 12:33:01
Есть проблема подключения ActiveX библиотек для Компас х64, библиотека зарегистрированная как com видна на вкладке ActiveX только при запуске Компас с админскими правами. Для себя эту проблему я решил так, просто сделал эту библиотеку автоматически подключаемой при старте Компас, т.е. библиотекой AddIn. Как зарегистрировать таким образом библиотеку описано в sdk, просто прописать определенный ключ в реестре.

Могу ли поинтересоваться, где конкретно в SDK мне смотреть?
Как вообще выглядит этот определённый ключ в реестре или же как его сгенерировать?
Нужно ли что-то менять в коде самой библиотеки чтобы зарегестрировать её этим самым другим (Addin овским способом) ?
::)  :)

once

Откройте файл sdk.chm и на закладке поиск напишите addin.
Я просто через телефон отвечаю, и мне лень писать много, если бы с компа я бы пример выложил. В библиотеке ничего менять не нужно.

Elisey Afanasjev

Цитата: once от 28.03.19, 15:05:25
Откройте файл sdk.chm и на закладке поиск напишите addin.
Я просто через телефон отвечаю, и мне лень писать много, если бы с компа я бы пример выложил. В библиотеке ничего менять не нужно.

А когда можно будет у вас проконсультироваться ещё раз?
Я просто не могу понять, нужно ли что-то в коде менять или нет. И регистрация с помощью регистрация с помощью regsvr32 не работает... Пишет, что не найдена точка входа DllRegisterServer

С помощью regasm.exe всё регистрируется, но он также не видит библиотеку...

DesignЯR

Подключайте библиотеку как на картинке и не надо заморачиваться с регистрациями. Если библиотека правильно написана, то она и так подключится. Компас при этом должен быть запущен через правую кнопку мыши - "Запуск от имени администратора".
ЦитироватьПишет, что не найдена точка входа DllRegisterServer
А вот это может быть ошибкой в коде. Выкладывайте проект полностью( можно без уникальных процедур и классов), может поможем чем сможем.
+ Благодарностей: 1

once

Через regsvr32 .net библиотека и не должна регистрироваться, только через regasm и это обязательно, иначе не будет работать. Почитайте про AddIn библиотеки и станет понятней о чём речь. не найдена точка входа DllRegisterServer это не ошибка, это следствие неправильной регистрации .Net dll-ки через regsrv32.
+ Благодарностей: 1

DesignЯR

Цитироватьтолько через regasm и это обязательно
Повторюсь. Ни разу в жизни не запускал "regasm" и  dll  библиотеки из C# норм. работают.
+ Благодарностей: 1

once

Это уже интересно. "Если библиотека правильно написана, то она и так подключится.". А правильно это как? Просветите тогда. И о какой версии Компаса речь?
+ Благодарностей: 1

DesignЯR

После нововведений в 16 Компасе я перешел с Delphi на С#(о чем не жалею).(соответственно более ранние версии рассматривать не вижу смысла...) . За основу библиотеки всегда беру Step2 (там предусмотрена инструментальная панель и шрифт иконок). Сейчас попробовал запустить код, который содержался во вложении "библиотеки.txt " - код рабочий, только в настройках проекта добавил как на картинке. И Visual Studio и Компас запускать ПКМ->"Запуск от имени администратора"
+ Благодарностей: 2

once

Да о настройке comvisible говорил сам автор этой темы еще в первом сообщении. Только делал он это через интерфейс студии, а не через кс-ник. И не все пользователи являются админами, соответственно подключить библиотеку не смогут. А регасм вы не запускаете потому что за Вас это студия делает. Вы пробовали подключить свою библиотеку под обычным юзером не на компе разработчика?
+ Благодарностей: 1

DesignЯR

Под обычным юзером но с правами админа - да. Если же мы рассмотрим  крупную организацию, где вместо системников - "коробки", где всякие корпоративные политики безопасности, где заблокированы флешки и разные приколы с почтой - то тут понятно, что без админа из другого департамента не обойтись...
+ Благодарностей: 1

once

В том то и дело, что прикладная библиотека обязана просто подключаться в большой организации либо самим пользователем, не имеющим прав админа (но вот здесь проблемка), либо администратором, например, через регистрацию библиотеки AddIn, чтобы она автоматом загружалась. Иначе админ повесится.
+ Благодарностей: 1

DesignЯR

Могу ошибаться, но ,кажется, для библиотек rtw права админа не нужны.
В больших  организациях политика такая, что  конструктор должен доказать своим руководителям, что ему нужна какая-то библиотека и с ней он сможет работать в три раза быстрее - не только чертить, но и думать (хотя думают только ОНИ, а мы простые исполнители примитивной работы), а те уже  через систему тендеров и откатов найдут исполнителя для библиотеки. К этому времени задачи уже изменятся, и библиотека станет неактуальной. Потом руководитель проведет презентацию о том как ему удалось улучшить работу конструкторов и те теперь будут делать работы больше и быстрее. Знакомо?...
+ Благодарностей: 1

Elisey Afanasjev

Цитата: once от 28.03.19, 19:16:21
Это уже интересно. "Если библиотека правильно написана, то она и так подключится.". А правильно это как? Просветите тогда. И о какой версии Компаса речь?

Подключилась вечерком...) Но я обнаружил, что её можно увидеть или подключить только с правами админа. То, о чем и написано выше :)
С Addin  так пока и не разобрался, завтра буду лопатить. Компас16 x64  :)

Elisey Afanasjev

Цитата: once от 28.03.19, 19:44:37
Да о настройке comvisible говорил сам автор этой темы еще в первом сообщении. Только делал он это через интерфейс студии, а не через кс-ник. И не все пользователи являются админами, соответственно подключить библиотеку не смогут. А регасм вы не запускаете потому что за Вас это студия делает. Вы пробовали подключить свою библиотеку под обычным юзером не на компе разработчика?
Да, пробовали, не работает :(
буду думать как перехерачить её в rtw, думаю это не должно быть сложно :/

Но от консультации в любом размере точно не откажусь

Rtw - это переименованная Dll, смотрите в SDK, какие функции в ней обязательны, чтобы Компас-3D понял, что это его библиотека.
Цитата: DesignЯR от 28.03.19, 19:30:46
После нововведений в 16 Компасе я перешел с Delphi на С#(о чем не жалею).(соответственно более ранние версии рассматривать не вижу смысла...) . За основу библиотеки всегда беру Step2 (там предусмотрена инструментальная панель и шрифт иконок). Сейчас попробовал запустить код, который содержался во вложении "библиотеки.txt " - код рабочий, только в настройках проекта добавил как на картинке. И Visual Studio и Компас запускать ПКМ->"Запуск от имени администратора"
Ничего там такого нового не было, чтобы таких трудностей добавить.
+ Благодарностей: 1