Re: импорт из dll в VC6
- From
- Andrey Voitenkov ()
- To
- Boris Rudakov ()
- Date
- 2003-10-20T00:12:32Z
- Area
- CARBON.COPY
* Forwarded from area 'SU.WINDOWS.PROG'
From: Andrey Voitenkov <mccloud@vimas.com>
Boris Rudakov wrote:
[...]
> AV> Микрософт есть микрософт, у них и не C++, а "Microsoft C++" :\
>
> Знаешь, пожалуй что дополнения к плюсам - одна и знемногих областей, где
> художества мелкософта логичны, разумны и очень полезны. И слава Богу что
> остальные производители компайлеров (в первую очередь - подвиндозных) эти фени
> повторяют, возводя в ранг стандарта де-факто.
>
> И что особенно странно: в тех случаях, когда их синтаксис расходится с другими
> грандами, мелкософтовский синтаксис очень и очень часто намного изящнее и
> уместнее. Взять хоть те же проперти классов: насколько коряв и непродуман
> борландоидный синтаксис, настолько же изящно мелкософтоиды заюзали свой
> __declspec.
>
> Но это так, к слову...
я не спорю, я все эти художества воспринимаю как данность,
и ругаю без злобы, как плохую погоду :)
[...]
> AV> Ватком понимает микрософтовый формат. Я про 11й ватком, насчет более
> AV> старых не знаю, не сталкивался.
>
> Который Open уже, да ? Все хочу его скачать и попробовать, но все никак не могу
> собраться :(
Нет, я про Powersoft Watcom 11.0B. Вышел он где-то в 98-99 годах, если
мне память не изменяет. Тогда по-моему Sybase им занимались.
[...]
> AV> Ну и сюда еще добавим опциональную ваткомовскую регистровую конвенцию
> AV> вызовов, которая и в win32 у них может применяться.
>
> Прошу пардону !
>
> Что значит "и в win32" ???
>
> У Борланда с Мелкософтом __fastcall никто не отменял ! Более того, поскольку
> порядок использования регистров не совпадает, начиная с какой-то 5.x версии
> Борланд ввел еще одну модель - __msfastcall, совместимости для.
>
У них(ватком), в их конвенции register использовалось больше регистров,
чем у микрософта и использовались они не совсем совместимо в __fastall.
Точнее не скажу, давно это было, не помню я подробностей.
Помню, что наступил я очень больно на эти грабли...
Там можно было извратиться сделать такой трюк: указать конвенцию
register для проекта и проэкспортировать функцию без указания конвенции
в декларации. В итоге собранные таким образом клиент и dll'ка прекрасно
понимали друг друга, а вот если скормить такой хедер другому
компилятору - он решал, что это stdcall, всё прекрасно линковалось,
и не работало ;)
[...]
> AV> Я рассматриваю задачу в контексте исходного письма, т.е. создание
> AV> библиотеки импорта для чужой длл'ки, неизвестно кем написанной и
> AV> неизвестно чем собранной.
>
> 1. В постановке вопроса было заявлено что есть .h
> Очевидно что если нет описания интерфейса, то все остальное - бесполезно. Так
> что априори считаем что интерфейс всех функций известен. Включая параметры и
> модели вызова.
Ну так в том и дело, что я не считаю наличие .h полным описанием
интерфейса. В большинстве случаев хедера достаточно, но у меня
уже есть паранойя, потому и проверяю, если речь идет не об академических
экспериментах.
[тут много поскипано]
Идея появилась.
Инициатору треда можно предложить создать в VC пустую dll с тем же
именем, и с теми же экспортами, что описаны в имеющемся хедере и
получить библиотеку импорта непосредственно от линкера. По моему это
самый удачный вариант будет.
--
mccloud@
--- ifmail v.2.15dev5
* Origin: Volia ISP (2:5020/400)