Подключение библиотеки 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, просто прописать определенный ключ в реестре.

once

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

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

А вот это может быть ошибкой в коде. Выкладывайте проект полностью( можно без уникальных процедур и классов), может поможем чем сможем.

once

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

DesignЯR

Цитироватьтолько через regasm и это обязательно

Повторюсь. Ни разу в жизни не запускал "regasm" и  dll  библиотеки из C# норм. работают.

once

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

DesignЯR

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

once

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

DesignЯR

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

once

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

DesignЯR

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

Elisey Afanasjev

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


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

Elisey Afanasjev

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

Да, пробовали, не работает :(
буду думать как перехерачить её в rtw, думаю это не должно быть сложно :/

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

Sabahs

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

Ничего там такого нового не было, чтобы таких трудностей добавить.