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

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


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

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

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

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

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

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


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

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

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

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

EXPORTS
myfuncn = _myfuncn@Х

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

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

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


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33288729
Фотография MustDie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это уже больше похоже на дельный совет! Однако, вот что выдает мне 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
Сделать lib (COFF) из dll (OMF)
    #33288975
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.rxlib.ru/faqs/faqc_en/16809.html

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


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


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