![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
Использую в программе библиотеку csgl для использования openGL функций. Она состоит из 2х файлов. csgl.native.dll который при инсталяции в библиотеки копируется в windows/system32 и файла csgl.dll который является net оберткой найтивной библиотеки. csgl.dll референсю в проект, теперь для переноса программы мне надо за собой тоскать и windows/system32/csgl.native.dll.
Как ее можно собрать в одну сборку? Или хотя бы изменить путь до csgl.native.dll, чтобы программа искала ее в моей папке. Вторая такая же трудность. Использую библиотеки autocad для обращения к файлам. При их добавлении получаются 2 net обертки AutoCDA.Interop.dll и AXDBLib.Interop.dll, которые ссылаются на реальные dll. Как бы мне собрать все в одной папке? Чтобы программу можно было переносить простым копированием. Или для каждого разворачивания программы придется писать инсталятор, который будет копировать win32 dll, заводить на них запись в реестре, создавать net обертку заново и подключать к моей проге? |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
вам придется регистрировать COM объекты в системе. возможно это делать и если библиотеки лежат не в C:\windows\system32
для этого используйте regsvr32.exe (фактически она ничего кроме как вызов функции DllRegisterServer (она определена как точка входа в COM длл-ке) и не делает). собственно регите объект(там же где у вас лежит ваша программа) + таскаете за собой интероп к ней же. и на этом приключения мб закончатся.... но COM компонент может иметь поздне связывание с еще кучей COM компонентов.. и вот тут вам придется подумать че и откуда и как регить. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
то есть брать com dll класть их в свою папку, создавать на них интероп... потом при переносе перед запуском выполнять regsvr32.exe для каждой dll? Тогда она зарегится в системе и интероп будет работать?
|
|||
|
||||
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
Итак.
Делаю regsvn32 /i csgl.native.dll Ответ csgl.native.dll была загружена, но найти точку входа для DllRegisterServer не удалось. Зарегистрировать этот файл не возможно. Тут я вспомнил что есть исходники. Исходники из себя представляют проект на C из которых собирается csgl.native.dll я решил его не трогать. И проект на c# который предоставляет оболочку для openGL. c# состоит из описания интерфейсов вызова к каждой функции привязана функция из внешней dll через DllImport Вот такие 3 константы я нашел. public const string OPENGL_LIB = "OPENGL32.DLL"; public const string GLU_LIB = "GLU32.DLL"; public const string CSGL = "csgl.native.dll"; Я так понял это пути к библиотекам по умолчанию находящихся в windows/system32. Сделал так скопировал csgl.native.dll к себе. В c# проекте поменял так public const string CSGL = "g:\\Temp\\csgl.native.dll"; Скомпилировал c# проект в csgl.dll ... зареференсил его заново (удалил библиотеки из windows/system32) и все заработало. Вопрос. Как можно не жестко задавать путь для поиска библиотеки? Чтобы программа искала ее в текущей папке. Или все же как то можно зарегисирировать библиотеку? Добавлено через 5 минут и 9 секунд Ага прописал. public const string CSGL = ".\\csgl.native.dll" Теперь библиотека берется по текущему пути. Остался вопрос можно ли ее зарегистрировать? |
|||
|
||||
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
Трудность с AutoCad решилась проше. Посмотрел какие файлы референсятся. Оказались 2 файла из Program Files/Common Files/Autodesk Shared с расширением tlb (первый раз такое вижу). Ну я их скопировал к себе и прореференсил напрямую. Сейчас перенесу все на машину где нет автокада и буду проверять переносимость.
|
|||
|
||||
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
Рано обрадовался.
.tlb autocad`а не референсятся. и не регистриуются, говорит, что не похоже на dll или ocx файл. Как узнать точно куда ссылается Interop файл, может я не тот файл выбрал? Добавлено через 11 минут и 20 секунд А вот, понял. Если на компе стоит автокад, то tlb файл референсится, а если нет, то не референсится и эксепшен вылетает. При референсе такая ошибка. A reference to '..path..\acax16enu.tlb' could not be added. Please make sure that the file is accesible, and that it is a valid assembly or COM component. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |