|
|
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
Насчет implib.exe от Микрософта.... есть такая программа, вернее была в Miscrosoft C. В Visual C ее уже нету. И делала она точно такие-же OMF библиотеки как Борландовская утилита, потому что тогда Микрософт не использовал COFF формат :) В Visual C зато есть утилита lib.exe, которая сама умеет делать библиотеки для импорта. Любыми средствами (хоть вручную хоть через борландовский imdef) делаешь def файл для своей dll. Потом lib /def:myimport.def , и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 20:59 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
MustDieВот к чему я пришел. Разница между стандартами библиотек в работе со стеком (где-то вычитал). Не верно. В одной и тоже библиотеке (и библиотеке объектников и в DLL) ты можешь иметь функции работающие со стеком как угодно. MustDieНеужели никто не знает как это сделать? У меня в библиотеке более 1200 функций - я свихнусь их динамически подключать! а сделать массив имен и массив адресов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 22:07 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
White OwlВ Visual C зато есть утилита lib.exe, которая сама умеет делать библиотеки для импорта. Любыми средствами (хоть вручную хоть через борландовский imdef) делаешь def файл для своей dll. Потом lib /def:myimport.def , и все. Я с этого начал (см. начало темы). Lib нормально собирается и безошибочно прилинковывается, однако, при вызове функций (причем после их отработки) вылетает сообщение: Чтобы это значило? При динамическом подключении все ОК. Изменения директив вызова функций в родном h-нике, либо устранение/добавление extern "C" приводят либо к ошибке на этапе компиляции, либо к ошибке в доступе к памяти в момент обращения к функции. Тогда как в первом случае функции хотя бы успевают отработать. White Owlа сделать массив имен и массив адресов?Что-то вроде этого и пришлось на данный момент наваять, но ведь обидно, что не удается разобраться! Причем заковырка-то, скорее всего, плевая... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 23:16 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
MustDieЧтобы это значило? А вот это как раз и есть разная работа со стеком. В dll функция сама чистит стек а потом еще и вызывающая программа чистит стек или наоборот ни тот ни другой стек не чистят. Смотри как сделаны вызовы в dll и как в программе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 01:14 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
MustDieПопробовал. Не катит. Кроме того, все что там описано можно получить просто используя impdef с опцией -а. При этом в Билдере есть еще и утилита для преобразования lib-ов из COFF в OMF. Поэтому проблем-то никаких при использовании MSVC-библиотеки в Builder, надо-то как раз НАОБОРОТ! Если бы все так просто было - там черточку убрал, сюда поставил, то уж написал бы кто-то парсер для DEF-файлов, однако я ничего не нашел в Интернете. Если наоборот , то у меня дома в какойто книжке это было написанно как сделать ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 08:44 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
Для MustDie: На поразвлекайся. Там исходные тексты и батник собирающий: 1) BC dll с двумя процедурами (cdecl и stdcall) и тестовый пример использования этой dll через сам BC. 2) VC1_test - библиотека импорта делается через "lib /def". Идеально работает с cdecl функциями, но падает на stdcall 3) VC2_test - VC делает промежуточную пустотелую dll, на ее основе линкер создает библиотеку импорта. Промежуточная dll убивается, а библиотека импорта идет в проект. Работает одновременно и с cdecl и с stdcall функциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 18:08 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
White Owl MustDieНеужели никто не знает как это сделать? У меня в библиотеке более 1200 функций - я свихнусь их динамически подключать! а сделать массив имен и массив адресов? Да вот, действительно. Вот например из MFC ODBC API грузиться динамически (по крайней мере в какой-то версии так было , может сейчас они отказались от этого). И ничего, написали себе кучу макросов, и -- вперед с песнями, все API. Сколько там функций ? Порядка нескольких сотен, кажется ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 20:27 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток! Прощу прощения за длительное отсутствие, но, думаю, следует эту тему продолжить, ибо конкретного решения до сих пор нет, а ситуация, судя по цитируемости в Инете, весьма распространенная. Во-первых, всем большое спасибо за участие в дискуссии. Во-вторых - результаты моих мучений. Спасибо 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. lib /def:<defname>.def 3) подключить lib: #pragma comment (lib, "<libname>.lib") 4) использовать функции с описанием их как __cdecl или __stdcall соответственно. Однако, при таком раскладе не удается автоматизировать процесс создания lib из существующей dll, что в моей ситуации необходимо. Парсер для создания def-файла, даже имея все h-файлы с описаниями функций библиотек, представляется мне весьма сложным в отношении _stdcall -функций, ибо возможность подсчитать байты параметров функций себе плохо представляю, учитывая наличие множества пользовательских типов данных. Соответсвенно, вопрос остается открытым. Алгоритм, описанный выше, является плодом моих исследований в данной области, соответсвенно использовать его как руководство я бы не рекомендовал, не смотря на то, что у меня он работает безошибочно. Жду ваших рекомендаций и замечаний по этому вопросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 00:06 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
А у вас действительно есть dll c cdecl и stdlib вызовами? Обычно все же либо одно, либо другое. И чаще всего cdecl. Во вторых, если хочется делать такую библиотеку импорта регулярно... я бы взял perl, и на нем накатал бы небольшой скрипт который на основе SomeLib.h генироровал бы SomeLib.c. Собственно говоря там писать всего ничего. Что-то в духе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Впрочем, есть еще вариант - написать свой собственный implib.exe который будет делать COFF библиотеки :) Да и загрузку dll в рантайме, никто еще не запрещал. Так что, если честно я не очень понимаю в чем затык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 01:38 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
А нафига нужно грузить все эти DLL именно статически ??? Грузи динамически, для этого lib-ы не нужны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 09:59 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)А нафига нужно грузить все эти DLL именно статически ??? Грузи динамически, для этого lib-ы не нужны Выше я описал проблему и то, почему надо именно статически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 21:46 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
Господа, еще один вопрос в ту же тему. В def-файле для каждой функции прописывается ее номер: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 22:17 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
MustDie Gluk (Kazan)А нафига нужно грузить все эти DLL именно статически ??? Грузи динамически, для этого lib-ы не нужны Выше я описал проблему и то, почему надо именно статически. Не убедил Ничего кроме чиста спортивного интэрэса ВЫШЕ я не обнаружил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 10:10 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
Я никого и не старался тут в чем-то убеждать. Просто по жизни люблю халяву и просто плохо сплю, когда мне дают библиотеки, дают готовые h-ники, а я должен для каждой функции писать динамический вызов.... Вопрос-то практически уже решен. Как только lib.exe заставить собирать lib-ы из def-ов без нумерации функций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2005, 20:07 |
|
||
|
Сделать lib (COFF) из dll (OMF)
|
|||
|---|---|---|---|
|
#18+
Ну не пиши ты эти номера функций в def и все. Нашел проблему... К тому же я тебе уже показывал как можно на основе *.h получить *.c в автоматическом режиме и делать библиотеку экспорта через временную dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2005, 21:38 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33291906&tid=2032571]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 395ms |

| 0 / 0 |
