Re: импорт из dll в VC6
- From
- Andrey Voitenkov ()
- To
- Boris Rudakov ()
- Date
- 2003-10-19T15:51:08Z
- Area
- CARBON.COPY
* Forwarded from area 'SU.WINDOWS.PROG'
From: Andrey Voitenkov <mccloud@vimas.com>
Boris Rudakov wrote:
[...]
> AV> Я имел в виду impdef :)
> AV> Вариант microsoft dll -> microsoft def.
>
> О !
> А что, у мелкософта формат def сменился и он стал несовместим с тем что у
> других ?! :):):):)
Ладно, сформулируем по другому:
def, который будет правильно понят lib'ом :)
Микрософт есть микрософт, у них и не C++, а "Microsoft C++" :\
>
> AV> За общий случай dll -> import lib
>
> Хочу заметить, что общего случая-то и НЕТУ.
>
> * Есть два основных фундаментальных формата либ: старый, который благополучно
> продолжает юзать Борланд, и нынешний мелкософтовский, который поддерживают все
> остальные, включая Гнусь. Есть еще строящий из себя птицу-Феникс Ватком, но про
> него мало что известно.
Ватком понимает микрософтовый формат. Я про 11й ватком, насчет более
старых не знаю, не сталкивался.
>
> * Есть мэнглинг имен, который - личное половое дело каждого компайлера. У
> Борланда и Мелкософта они, естессно, разные. Про Гнусь точно не скажу, но ее
> либы (ВРОДЕ БЫ) совместимы с мелкософтом.
Ну и сюда еще добавим опциональную ваткомовскую регистровую конвенцию
вызовов, которая и в win32 у них может применяться.
>
> Так что - общего случая нет. Их как минимум два и возможны вариации.
>
> Впрочем, если учесть что у Борланда проблем с изготовлением либ импорта нет
> (есть утилита implib и вполне разумный мэгнглинг), то, пожалуй, можно говорить
> про "общий случай": "драный мелкософт с которым по-жизни проблемы на каждом
> шагу". Да, там требуется аналог борландовской implib...
>
> AV> я бы вообще не стал браться,
> AV> даже если бы удалось сделать вариант, идеально проходящий все
> AV> приемочные тесты, я бы его не применил в боевых условиях без
> AV> ручной проверки. Но тогда весь смысл этой автоматизации теряется.
>
> Странно. Оно либо работает, либо нет. Если линкер все чего хочет нашел, модуль
> собрался и в секции импорта фигурируют те самые функции из тех самых длл-ей, то
> значит все правильно.
Я рассматриваю задачу в контексте исходного письма, т.е. создание
библиотеки импорта для чужой длл'ки, неизвестно кем написанной и
неизвестно чем собранной. Формат нужной библиотеки импорта известен,
в данном случае M$. Да, создание секции импорта действительно сработает,
но дальше возможны грабли с конвенциями вызова. Я бы проверил _каждый_
вызов отладчиком, по крайней мере явные накладки с конвенциями можно
увидеть сразу.
В общем-то, в который раз напрашивается вывод:
использовать в боевых условиях такие dll'ки не стОит ;)
--
mccloud@
--- ifmail v.2.15dev5
* Origin: Volia ISP (2:5020/400)