Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сделать lib (COFF) из dll (OMF) / 25 сообщений из 41, страница 1 из 2
19.09.2005, 23:06
    #33277657
MustDie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
Ну, собственно, всю проблему в заголовке написал!
Есть Борландовая ДЛЛ-ка - надо ее статически прилинковать в проект VC6.
Пробовал через билдеровскую impdef сделать DEF, а из него уже мокрософтовской LIB /DEF:filename.def - получить LIB. Все бы хорошо - даже линкуется, а вот в момент вызова функции вываливается. Есть мысль, что из-за различной структуры COFF и OMF библиотек.
Исходные данные: DLL (Builder6) + *.h к ней.
Задача: использовать эту библиотеку (без перекомпиляции самой dll) в проекте VisualC++ (6), подключая ее статически.
Подскажите, плз!, как быть?
...
Рейтинг: 0 / 0
19.09.2005, 23:55
    #33277673
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
ээээ... во первых, COFF-OMF это различие на уровне объектников и библиотек. Dll собранные из разных библиотек не различаются, вернее не должны различаться :)
На практике разница есть потому что разные линкеры работают по разному.

Чтобы подключить статически dll надо дать на вход линкеру специальную библиотеку. Которая будет состоять из заглушек для всех импортируемых из dll функций. Такая библиотека делается утилитой implib.exe. А не impdef! :)
...
Рейтинг: 0 / 0
20.09.2005, 07:22
    #33277773
MustDie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
implib-овские lib-ы компилятор VisualC++ не ест вообще. Может и есть возможность средствами MS сделать корректный lib из любой библиотеки, но если б я нашел - не спрашивал бы. А вот различия OMF и COFF сводятся к работе с памятью, в связи с чем при динамической линковке - получил конкретный адрес функции и все ОК, а статически - смещения не бьют. А OMF оказывается еще и разные бывают - Intel и Borland. Есть у Borland-а утилита coff2omf.exe - так вот мне бы как раз обратно надо!
...
Рейтинг: 0 / 0
20.09.2005, 08:56
    #33277823
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
Гмм как и в ветке про DLL в Linux-е что-то не так с формулировками в вопросах
...
Рейтинг: 0 / 0
20.09.2005, 17:48
    #33279659
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
MustDieimplib-овские lib-ы компилятор VisualC++ не ест вообще.
implib разный бывает. Бывает от Борланда, бывает от Микрософта....
...
Рейтинг: 0 / 0
20.09.2005, 20:41
    #33279965
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
MustDie
Есть Борландовая ДЛЛ-ка - надо ее статически прилинковать в проект VC6.
Пробовал через билдеровскую impdef сделать DEF, а из него уже мокрософтовской LIB /DEF:filename.def - получить LIB. Все бы хорошо - даже линкуется, а вот в момент вызова функции вываливается. Есть мысль, что из-за различной структуры COFF и OMF библиотек.


Нет. Библиотеки уже отработали и .dll и .exe уже собраны. Значит не в этом дело.

Дело видимо в разных соглашениях о вызовах, используемых в борланде и у MS.
...
Рейтинг: 0 / 0
20.09.2005, 21:41
    #33279992
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
MasterZivДело видимо в разных соглашениях о вызовах, используемых в борланде и у MS.
Разные соглашения о вызовах DLL??? Что ты курил? :)
...
Рейтинг: 0 / 0
21.09.2005, 08:42
    #33280249
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
White Owl MasterZivДело видимо в разных соглашениях о вызовах, используемых в борланде и у MS.
Разные соглашения о вызовах DLL??? Что ты курил? :)

он прав , только не DLL а функций ...
...
Рейтинг: 0 / 0
21.09.2005, 19:17
    #33282364
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
JibSkeart White Owl MasterZivДело видимо в разных соглашениях о вызовах, используемых в борланде и у MS.
Разные соглашения о вызовах DLL??? Что ты курил? :)
он прав , только не DLL а функций ...
А что ты курил? Я тоже хочу такую траву :)
...
Рейтинг: 0 / 0
21.09.2005, 23:41
    #33282566
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
Где-то на rsdn.ru это было хорошо описано ....
http://www.rsdn.ru/article/devtools/bcbdll.xml
вот кажется здесь ...
...
Рейтинг: 0 / 0
22.09.2005, 02:09
    #33282602
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
MasterZivГде-то на rsdn.ru это было хорошо описано ....
http://www.rsdn.ru/article/devtools/bcbdll.xml
вот кажется здесь ...
ХА! Так ты не путай директивы компилятору которые управляют naming convention и вызов функций из dll.
Разные принципы именования процедур, классов и методов это всегда существовавшее различие между компиляторами. И оно обычно никуда далее объектников и библиотек не идет. А приниципы именования и вызова функций из dll это часть операционной системы. Любой компилятор может следовать этим правилам именования. При помощи разных ключевых слов, хоть часто и похожих - о чем в данной статье и написано.
В любом случае, dll подготовленная при помощи одного транслятора, может статически линковаться в программу подготовленную другим транслятором. Иногда прийдется повозится, но можно. Разница будет как раз на уровне директив компилятора и соотвественно библиотек.
...
Рейтинг: 0 / 0
22.09.2005, 08:59
    #33282766
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
авторХА! Так ты не путай директивы компилятору которые управляют naming convention и вызов функций из dll.
Разные принципы именования процедур

Дело не столько в принципах наименования функций aka декорировании, сколько в способе размещения параметров в стеке и регистрах, а также в том кто чистит стек вызывающий или вызываемый. Я конечно понимаю, .NET !!!
Значит калоши не нужны (с) но стыдно не знать этого.
...
Рейтинг: 0 / 0
22.09.2005, 09:04
    #33282773
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
Что касается классов, тут все еще печальнее. Попробуйте экспортировать множественно наследованный класс C++ в DLL из Delphi. Вряд-ли у Вас получиться что-нибудь вменяемое :)
...
Рейтинг: 0 / 0
22.09.2005, 10:02
    #33282894
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
White Owl JibSkeart White Owl MasterZivДело видимо в разных соглашениях о вызовах, используемых в борланде и у MS.
Разные соглашения о вызовах DLL??? Что ты курил? :)
он прав , только не DLL а функций ...
А что ты курил? Я тоже хочу такую траву :)

ты что у Си и у паскаля разные соглашения о вызовах процедур.

а травку пока еще не курил :)
...
Рейтинг: 0 / 0
22.09.2005, 10:03
    #33282897
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
тфу , не паскаль, а у борланцких кампиляторов.


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
22.09.2005, 19:09
    #33284690
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
Вот кстати одно из тех, за что я не люблю борландов - всегда все по-своему сделают. Это у них уже традиция. Как ширина железнодорожного полотна в России -- зачем - не понятно, но чтобы не как у всех.
...
Рейтинг: 0 / 0
22.09.2005, 19:34
    #33284708
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
MasterZivВот кстати одно из тех, за что я не люблю борландов - всегда все по-своему сделают. Это у них уже традиция. Как ширина железнодорожного полотна в России -- зачем - не понятно, но чтобы не как у всех.
Почему? OMF это ж не Борландовская разработка. А вовсе даже Intel'евская. Причем Микрософт тоже когда-то OMF поддерживали, а потом отказались от нее в пользу COFF. Когда делали Windows NT изобрели новый формат для исполнимых файлов (PE). Основалие его на ДЭКовском COFF, ну и для упрощения линковки сменили формат и для объектников и библиотек в своих компиляторах.
Так что в данном случае Борланды как раз не виноваты. Это Микрософты как всегда выпендрились :)
...
Рейтинг: 0 / 0
23.09.2005, 15:20
    #33286289
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
Я про СОГЛАШЕНИЯХ НА ВЫЗОВЫ, а не про библиотеки.
...
Рейтинг: 0 / 0
23.09.2005, 19:36
    #33286890
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
А соглашения на вызовы из dll всегда одинаковы между всеми компиляторами. Потому что dll это сущность операционной системы а не транслятора.
Хотя конечно можно сделать такую уникальную dll которая не будет читаться никем кроме автора :)
...
Рейтинг: 0 / 0
24.09.2005, 08:49
    #33287020
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
Почему некоторым людям так нравится выставлять себя на посмешище ?
Не знаешь - ПРОВЕРЬ, не можешь проверить не венькай и верь тем кто ЗНАЕТ.

Для DLL соглашения о вызовах ИМЕЮТ ЗНАЧЕНИЕ. Разумеется зная интерфейс можно использовать любую DLL, но при этом необходимо знать используемые ей соглашения о вызовах.
...
Рейтинг: 0 / 0
24.09.2005, 13:36
    #33287091
MustDie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
White Owlimplib разный бывает. Бывает от Борланда, бывает от Микрософта....
Первый раз слышу. Есть lib.exe, но как ему впихнуть Борландовскую dll?

Вот к чему я пришел. Разница между стандартами библиотек в работе со стеком (где-то вычитал). При динамической компоновке, функция GetProcedureAdress возвращает реальный адрес нужной функции, а при статическом подключении, насколько я понимаю, используется смещение на каждую функцию. Вот тут и загвоздка - COFF по своему заполняет память, а OMF - по-своему.
У Борланда есть утилита coff2omf.exe, так вот мне надо как раз наоборот! При этом "implib.exe -a" не прокатывает...
Неужели никто не знает как это сделать? У меня в библиотеке более 1200 функций - я свихнусь их динамически подключать!
...
Рейтинг: 0 / 0
24.09.2005, 22:32
    #33287239
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
заюзай impdef.exe
получишь файл с расширением def
если в этом файле в разделе
EXPORTS
_myfuncn@Х = _myfuncn @1

то надо переделать так

EXPORTS
myfuncn = _myfuncn@Х

вот так а дальше

тузлой implib Mydll.lib mydll.def

насколько я помню .


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
26.09.2005, 14:06
    #33288729
MustDie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
Вот это уже больше похоже на дельный совет! Однако, вот что выдает мне impdef:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
LIBRARY     MYDLL.DLL

EXPORTS
    @Ansi2Dos$qpci                 @ 1    ; Ansi2Dos(char *, int)
    @Dos2Win$qpci                  @ 2    ; Dos2Win(char *, int)
    @Koi82Win$qpci                 @ 3    ; Koi82Win(char *, int)
    ............
    /* при этом, где-то с середины начинается так */
    CheckAndUpdate                 @ 2020 ; CheckAndUpdate
    CopyMap                        @ 2021 ; CopyMap
    DeleteMap                      @ 2022 ; DeleteMap
    ErrorMessage                   @ 2023 ; ErrorMessage
    ErrorMessageEx                 @ 2024 ; ErrorMessageEx
    ...........
    /* но кое-где встречается и так */
    _GlobalPointArea               @ 2038 ; _GlobalPointArea
    _GlobalPolyArea                @ 2039 ; _GlobalPolyArea
    _GlobalTextArea                @ 2040 ; _GlobalTextArea

Если impdef использовать с опцией -а, то получается вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
LIBRARY     MYDLL.DLL

EXPORTS
    _@Ansi2Dos$qpci               = @Ansi2Dos$qpci                      ; Ansi2Dos(char *, int)
    _@Dos2Win$qpci                = @Dos2Win$qpci                       ; Dos2Win(char *, int)
    _@Koi82Win$qpci               = @Koi82Win$qpci                      ; Koi82Win(char *, int) 
    ............
    /* при этом, где-то с середины начинается так */
    _CheckAndUpdate               = CheckAndUpdate                      ; CheckAndUpdate
    _CopyMap                      = CopyMap                             ; CopyMap
    _DeleteMap                    = DeleteMap                           ; DeleteMap
    _ErrorMessage                 = ErrorMessage                        ; ErrorMessage
    _ErrorMessageEx               = ErrorMessageEx                      ; ErrorMessageEx
    ...........
    /* но кое-где встречается и так */
    _GlobalPointArea               @ 2038 ; _GlobalPointArea
    _GlobalPolyArea                @ 2039 ; _GlobalPolyArea
    _GlobalTextArea                @ 2040 ; _GlobalTextArea

Отсюда вопрос - что как править и как использовать impdef (c -a или без)?
И откуда такая разница в описании функций в def-файле - то с собаками, то без, а то еще и с "баксами" - чтобы все это значило?
...
Рейтинг: 0 / 0
26.09.2005, 15:35
    #33288975
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
http://www.rxlib.ru/faqs/faqc_en/16809.html

А если как тут сказанно .


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
26.09.2005, 18:28
    #33289444
MustDie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сделать lib (COFF) из dll (OMF)
Попробовал. Не катит. Кроме того, все что там описано можно получить просто используя impdef с опцией -а. При этом в Билдере есть еще и утилита для преобразования lib-ов из COFF в OMF. Поэтому проблем-то никаких при использовании MSVC-библиотеки в Builder, надо-то как раз НАОБОРОТ! Если бы все так просто было - там черточку убрал, сюда поставил, то уж написал бы кто-то парсер для DEF-файлов, однако я ничего не нашел в Интернете.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сделать lib (COFF) из dll (OMF) / 25 сообщений из 41, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]