Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переносимость программ используюших win32 dll. 
:(
    Опции темы
Хоббит
Дата 12.5.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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 обертку заново и подключать к моей проге?
PM MAIL   Вверх
jonie
Дата 12.5.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



вам придется регистрировать COM объекты в системе. возможно это делать и если библиотеки лежат не в C:\windows\system32
для этого используйте regsvr32.exe (фактически она ничего кроме как вызов функции DllRegisterServer (она определена как точка входа в COM длл-ке) и не делает).
собственно регите объект(там же где у вас лежит ваша программа) + таскаете за собой интероп к ней же. и на этом приключения мб закончатся.... но COM компонент может иметь поздне связывание с еще кучей COM компонентов.. и вот тут вам придется подумать че и откуда и как регить.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Хоббит
Дата 12.5.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



то есть брать com dll класть их в свою папку, создавать на них интероп... потом при переносе перед запуском выполнять regsvr32.exe для каждой dll? Тогда она зарегится в системе и интероп будет работать?
PM MAIL   Вверх
Хоббит
Дата 14.5.2008, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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"
Теперь библиотека берется по текущему пути.

Остался вопрос можно ли ее зарегистрировать?
PM MAIL   Вверх
Хоббит
Дата 14.5.2008, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



Трудность с AutoCad решилась проше. Посмотрел какие файлы референсятся. Оказались 2 файла из Program Files/Common Files/Autodesk Shared с расширением tlb (первый раз такое вижу). Ну я их скопировал к себе и прореференсил напрямую. Сейчас перенесу все на машину где нет автокада и буду проверять переносимость.
PM MAIL   Вверх
Хоббит
Дата 14.5.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1083 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.