Wine: одинаковые имена ф-ий в цепочке вызовов динамических библиотек
От: AltCtrlDel  
Дата: 17.09.12 08:08
Оценка:
Привет всем!

Имеется libftd2xx.so экспортирующая ф-ии, например, FT_ListDevices.
Имеется виндовс-приложение использующее ftd2xx.dll (виндовс версию той же библиотеки, она устанавливается с драйверами ftdichip.com).

Существует обёртка http://2065.nm.ru/soft/gatopeichs_ftdi_wrapper.rar которая позволяет обращаться через неё к libftd2xx.so приложениям из под wine, она реализована библиотекой ftd2xx.dll.so,
НО, ко всем внешним именам добавляется префикс FTD2XX_, например, вышеупомянутая ф-ия FT_ListDevices становится FTD2XX_FT_ListDevices и т.д.

Чтобы не переделывать приложение я решил сделать ещё одну обёртку, в виде виндовой dll, которая будет экспортировать имена без префикса, и, при обращениям к ним вызывать предыдущую обёртку.

Перекомпилировал ftd2xx.dll.so в ftdiwrap.dll.so.

Cделал тривиальную ftd2xx.dll в которой по внешнему имени FT_ListDevices вызывается TD2XX_FT_ListDevices из ftdiwrap.dll.
Положил ftd2xx.dll в каталог приложения.
В результате wine: Unhandled stack overflow.

Для контроля сделал в винде промежуточную обёртку ftdiwrap.dll при обращении к её ф-ии TD2XX_FT_ListDevices вызывающую FT_ListDevices из ftd2xx_.dll, переименовал настоящую ftd2xx.dll в ftd2xx_.dll — приложение в настоящей винде беспроблемно работает. Вызовы идут так:

приложение из тривиальной ftd2xx.dll вызывает FT_ListDevices
ftd2xx.dll вызывает TD2XX_FT_ListDevices из ftdiwrap.dll
ftdiwrap.dll вызывает FT_ListDevices из ftd2xx_.dll (настоящая ftd2xx.dll, переименованная).

Получается, что в wine так нельзя? Или както можно?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.