powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сделать lib (COFF) из dll (OMF)
41 сообщений из 41, показаны все 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
Сделать lib (COFF) из dll (OMF)
    #33289591
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет implib.exe от Микрософта.... есть такая программа, вернее была в Miscrosoft C. В Visual C ее уже нету. И делала она точно такие-же OMF библиотеки как Борландовская утилита, потому что тогда Микрософт не использовал COFF формат :)

В Visual C зато есть утилита lib.exe, которая сама умеет делать библиотеки для импорта. Любыми средствами (хоть вручную хоть через борландовский imdef) делаешь def файл для своей dll. Потом lib /def:myimport.def , и все.
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33289631
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MustDieВот к чему я пришел. Разница между стандартами библиотек в работе со стеком (где-то вычитал).
Не верно. В одной и тоже библиотеке (и библиотеке объектников и в DLL) ты можешь иметь функции работающие со стеком как угодно.

MustDieНеужели никто не знает как это сделать? У меня в библиотеке более 1200 функций - я свихнусь их динамически подключать!
а сделать массив имен и массив адресов?
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33289663
Фотография MustDie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВ Visual C зато есть утилита lib.exe, которая сама умеет делать библиотеки для импорта. Любыми средствами (хоть вручную хоть через борландовский imdef) делаешь def файл для своей dll. Потом lib /def:myimport.def , и все.
Я с этого начал (см. начало темы). Lib нормально собирается и безошибочно прилинковывается, однако, при вызове функций (причем после их отработки) вылетает сообщение:

Чтобы это значило?
При динамическом подключении все ОК. Изменения директив вызова функций в родном h-нике, либо устранение/добавление extern "C" приводят либо к ошибке на этапе компиляции, либо к ошибке в доступе к памяти в момент обращения к функции. Тогда как в первом случае функции хотя бы успевают отработать.
White Owlа сделать массив имен и массив адресов?Что-то вроде этого и пришлось на данный момент наваять, но ведь обидно, что не удается разобраться! Причем заковырка-то, скорее всего, плевая...
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33289719
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MustDieЧтобы это значило?
А вот это как раз и есть разная работа со стеком. В dll функция сама чистит стек а потом еще и вызывающая программа чистит стек или наоборот ни тот ни другой стек не чистят. Смотри как сделаны вызовы в dll и как в программе.
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33289835
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MustDieПопробовал. Не катит. Кроме того, все что там описано можно получить просто используя impdef с опцией -а. При этом в Билдере есть еще и утилита для преобразования lib-ов из COFF в OMF. Поэтому проблем-то никаких при использовании MSVC-библиотеки в Builder, надо-то как раз НАОБОРОТ! Если бы все так просто было - там черточку убрал, сюда поставил, то уж написал бы кто-то парсер для DEF-файлов, однако я ничего не нашел в Интернете.

Если наоборот , то у меня дома в какойто книжке это было написанно как сделать ...
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33291708
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для MustDie: На поразвлекайся.
Там исходные тексты и батник собирающий:
1) BC dll с двумя процедурами (cdecl и stdcall) и тестовый пример использования этой dll через сам BC.
2) VC1_test - библиотека импорта делается через "lib /def". Идеально работает с cdecl функциями, но падает на stdcall
3) VC2_test - VC делает промежуточную пустотелую dll, на ее основе линкер создает библиотеку импорта. Промежуточная dll убивается, а библиотека импорта идет в проект. Работает одновременно и с cdecl и с stdcall функциями.
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33291906
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
MustDieНеужели никто не знает как это сделать? У меня в библиотеке более 1200 функций - я свихнусь их динамически подключать!
а сделать массив имен и массив адресов?

Да вот, действительно. Вот например из MFC ODBC API грузиться динамически (по крайней мере в какой-то версии так было , может сейчас они отказались от этого). И ничего, написали себе кучу макросов, и -- вперед с песнями, все API. Сколько там функций ? Порядка нескольких сотен, кажется ?
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33293163
ii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй вот так

Для твоих исходный условий вроде подходит:DLL перекомпилировать не надо
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33318612
Фотография MustDie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток!
Прощу прощения за длительное отсутствие, но, думаю, следует эту тему продолжить, ибо конкретного решения до сих пор нет, а ситуация, судя по цитируемости в Инете, весьма распространенная.
Во-первых, всем большое спасибо за участие в дискуссии.
Во-вторых - результаты моих мучений.
Спасибо White Owl за наглядный пример. Реально он не помог, но его исследование привело к некоторым умозаключениям.
Дело в том, что есть набор библиотек, которые обновляются практически каждый день. Есть ряд разработок на различных языках, использующих эти библиотеки, в том числе и на VC (с чем и проблема). Кроме того, эти библиотеки поставляются еще и сторонним разработчикам. Соотвествено, писать промежуточные библиотеки для создания lib-ов для VC, как в примере White Owl , равно как и плодить дубликаты этих библиотек для каждой среды разработки - не есть приемлимый вариант. Утилита, скачаная по ссылке от ii , кроме того, что отказывается воспринимать DLL со смешанными вызовами функций _cdecl и _stdcall (и в help-e ничего путного про это не написано), также еще и не является программой "open source", что не приветствуется моей компанией.
Итак, чтобы статически прилинковать библиотеку формата OMF в проект VC, требуется выполнить ряд шагов (самый простой пока вариант):
1) сделать def.
для этого, используя borland-овский impdef, генерируем def-файл с перечнем функций библиотеки, далее правим его следующим образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
LIBRARY     <DLLNAME>.DLL
EXPORTS 
//а) для __stdcall-функций
   my_stdcall_func@xx     @yy
   //где xx-суммарное количество байт параметров функции
   //yy - порядковый номер функции, как сгенерил impdef
   //my_stdcall_func - реальное имя функции в библиотеке 

//б) для __cdecl-функций
   my_cdecl_func = _my_cdecl_func      @yy
   //где yy - порядковый номер функции, как сгенерил impdef
   //my_cdecl_func - реальное имя функции в библиотеке 
2) используя поправленный def, сделать lib:
lib /def:<defname>.def
3) подключить lib: #pragma comment (lib, "<libname>.lib")
4) использовать функции с описанием их как __cdecl или __stdcall соответственно.

Однако, при таком раскладе не удается автоматизировать процесс создания lib из существующей dll, что в моей ситуации необходимо. Парсер для создания def-файла, даже имея все h-файлы с описаниями функций библиотек, представляется мне весьма сложным в отношении _stdcall -функций, ибо возможность подсчитать байты параметров функций себе плохо представляю, учитывая наличие множества пользовательских типов данных.
Соответсвенно, вопрос остается открытым.

Алгоритм, описанный выше, является плодом моих исследований в данной области, соответсвенно использовать его как руководство я бы не рекомендовал, не смотря на то, что у меня он работает безошибочно.

Жду ваших рекомендаций и замечаний по этому вопросу.
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33318646
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у вас действительно есть dll c cdecl и stdlib вызовами? Обычно все же либо одно, либо другое. И чаще всего cdecl.
Во вторых, если хочется делать такую библиотеку импорта регулярно... я бы взял perl, и на нем накатал бы небольшой скрипт который на основе SomeLib.h генироровал бы SomeLib.c. Собственно говоря там писать всего ничего. Что-то в духе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
while(<>) {
  if( /(\w)(\s.+?\(\.+?\));/im ) {
    if( $ 1  == "void" ) {
      print "$1$2 { return;}\n";
    } else {
      print "$1$2 { return ($1)0;}\n";
    }
  }
}
Полученый сишник вместе с хедером - компилируется в промежуточную dll, полученая библиотека импорта - то что нужно. И запускай это все, хоть десять раз на дню.

Впрочем, есть еще вариант - написать свой собственный implib.exe который будет делать COFF библиотеки :)
Да и загрузку dll в рантайме, никто еще не запрещал.
Так что, если честно я не очень понимаю в чем затык.
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33318994
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нафига нужно грузить все эти DLL именно статически ???
Грузи динамически, для этого lib-ы не нужны
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33321273
Фотография MustDie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)А нафига нужно грузить все эти DLL именно статически ???
Грузи динамически, для этого lib-ы не нужны

Выше я описал проблему и то, почему надо именно статически.
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33321282
Фотография MustDie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, еще один вопрос в ту же тему.
В def-файле для каждой функции прописывается ее номер:
Код: plaintext
myfunc@ 4     @number
При использовании Borland-ового IMPLIB можно указать опцию -f (force by name), тогда при подключении lib-a в проект, определение точек входа будет осуществляться по имени, а не по номеру. Вопрос: как заставить так же работать lib.exe (от MS), чтобы компилятор VC не ругался на lib, собранный по def-у, в котором не указаны номера функций (или указаны не те)?
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33321713
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MustDie Gluk (Kazan)А нафига нужно грузить все эти DLL именно статически ???
Грузи динамически, для этого lib-ы не нужны

Выше я описал проблему и то, почему надо именно статически.

Не убедил Ничего кроме чиста спортивного интэрэса ВЫШЕ я не обнаружил
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33341284
Фотография MustDie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я никого и не старался тут в чем-то убеждать. Просто по жизни люблю халяву и просто плохо сплю, когда мне дают библиотеки, дают готовые h-ники, а я должен для каждой функции писать динамический вызов....
Вопрос-то практически уже решен. Как только lib.exe заставить собирать lib-ы из def-ов без нумерации функций?
...
Рейтинг: 0 / 0
Сделать lib (COFF) из dll (OMF)
    #33341338
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну не пиши ты эти номера функций в def и все. Нашел проблему...
К тому же я тебе уже показывал как можно на основе *.h получить *.c в автоматическом режиме и делать библиотеку экспорта через временную dll.
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сделать lib (COFF) из dll (OMF)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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