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)