Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Совместимость с DLL стороннего производителя


Автор: np9mi7 22.11.2005, 15:20
Добрый день!

Задача: Имеется библиотека *.dll без исходных текстов, поставляемая стороннем производителем. Необходимо на её основе написать свою библиотеку, причем новая должна полностью поддерживать интерфейс предыдущей. Интерфейс новой библиотеки должен быть дополнен;

Решение:
1. Как всегда первое решение очень простое, медленное, но эффективное - написать враппер вокруг вызовов библиотеки поставляемой стороннем разработчиком;

Поставляемая библиотека:
Код

__stdcall int SomeMethod ();


Новая библиотека:
Код

__stdcall int SomeMethod ()
{
    int (*pfnSomeMethod) () = reinterpret_cast <int (*) ()> (GetProcAddress (hInstance, "_SomeMethod"));
    
    return (*pfnSomeMethod) ();
}


Не хочеться так делать по скольку это двойная переадресация вызова - сами понимаете не быстро;

2. Разобрать *.dll в *.lib и включить её в проект. Тут возникает несколько вопросов: Такое возможно сделать? Если да, то чем разобрать dll в lib?

Заранее благодарен за ответы.

Автор: rsm 22.11.2005, 15:49
См. http://wasm.ru/toollist.php?list=4 тулзы dll2lib и Advanced Dll Wrapper.

Автор: nikf 22.11.2005, 19:41
Цитата(np9mi7 @ 22.11.2005, 15:20)
двойная переадресация вызова - сами понимаете не быстро;
smile разницы не заметиш даже если пустиш в цикле с миллионом итераций.. Сказать точнее: переадресация занимает по времени на порядки меньше времени чем выполнение самой функции(если функция чего-то стоит) - на производительности проги это никак не скажется. И как вариант - он очень неплохой, если не лучший.Хотя может быть правильнее было-бы имея описание итерфейса создать полностью свою реализацию...

Автор: np9mi7 24.11.2005, 13:23
rsm, совершенно не получилось (может я чего не понимаю) поиспользовать dll2lib. Более того, оказывается поддержка этого программного продукта прекратилась как уже 3 года.

А ты сам пробывал использовать dll2lib?

ps: Advanced Dll Wrapper - а смысл? Зачем нужен враппер если в него ничего нового не добавляется?

Автор: np9mi7 24.11.2005, 15:42
Оказывается dll2lib меняет соглашения о вызове с __stdcall на __cdecl/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)