Поясню.
Есть .lib. В ней реализованы мои функции.
Есть .dll, которая подключает вышеуказанную статическую .lib
Можно ли в .dll экспортировать функции из .lib?
Гугл ничего нормального не выдает Может я поиском пользоваться не умею?
Где-то на форуме видел схожую ветку. Но проблема в том, что .lib реализует функции, которые дёргаются самой ОС Windows.
Поэтому объявление функций предоставлено ею же и я не могу указать __declspec(dllexport) — при компиляции .lib появляются ошибки переопределения функции.
Могу использовать только .def для экспорта.
Все, что нашел в MSDN, это перенаправление (func=anotherDll.func), но так не работает, видимо, нужна другая dll, а не lib.
Сами функции вызываются из создаваемой dll, но можно ли избежать "прослойки" типа:
DllFunc()
{
LibFunс();
}
Буду рад любой информации или ссылки на материалы.
Здравствуйте, Gendolph, Вы писали:
G>Все, что нашел в MSDN, это перенаправление (func=anotherDll.func), но так не работает, видимо, нужна другая dll, а не lib.
G>Сами функции вызываются из создаваемой dll, но можно ли избежать "прослойки" типа: G>
G>DllFunc()
G>{
G> LibFunс();
G>}
G>
это первое, что приходит в голову
почему вас такой вариант не устраивает? имена подфиксить можно с помощью .def файла
Здравствуйте, Gendolph, Вы писали:
G>Я так понимаю, что так работать будет чуть-чуть дольше (все-таки лишний вызов функции), да и некрасиво как-то. G>Хотелось бы более элегантного решения
что-то не видно от вас аргументов против этого метода
более качественные аргументы могли бы звучать так:
1) требуется много усилий для выявления функций для экспорта
2) требуется много времени для написания таких делегатов
3) очень высока вероятность допустить ошибку при написани таких делегатов, т.к. идет дублирование сигнатур функций
и тд
так что рекомендую освоить пока этот метод.
G>Может я что-то неправильно делаю — разве не достаточно просто указать lib-функцию в def файле, если в самой dll эта функция видна?
нужно понимать, что экспортированные функции подчиняются более строгим правилам, нежели простые функции в либе: у них свои конвенции вызова
поэтому легким способом вам не вытаращить функцию из либы наружу
On 12.09.2011 14:49, Gendolph wrote:
> Есть .lib. В ней реализованы мои функции. > Есть .dll, которая подключает вышеуказанную статическую .lib > Можно ли в .dll экспортировать функции из .lib?
Нет.
Либо собрать библиотеку (.lib) тоже в виде .dll,
либо в твоей .dll сделать свои функции-обёртки для каждой
из экспортируемой функции из .lib, и проэкспортировать их.
On 12.09.2011 15:03, Gendolph wrote:
> Может я что-то неправильно делаю — разве не достаточно просто указать > lib-функцию в def файле, если в самой dll эта функция видна?
в def нельзя библиотеку указат. Наоборот, по .def генерируется библиотека
импорта (.lib, но другая).
Может я что-то неправильно делаю — разве не достаточно просто указать lib-функцию в def файле, если в самой dll эта функция видна?
Достаточно или нет не знаю, но работает.
Оказывается, .def файл не был подключен к линкеру, хоть и создавался кликом правой кнопки на проекте->Add->New Item->Module Definition File
Теперь, просто подключив .lib к .dll и указав LibFunc в .def все работает.
Здравствуйте, Gendolph, Вы писали:
G>Теперь, просто подключив .lib к .dll и указав LibFunc в .def все работает.
поздравляю
получается, что я плохо себе представляю механизм экспорта
Re[3]: Экспорт функций в .dll из статической .lib
От:
Аноним
Дата:
12.09.11 18:37
Оценка:
U>получается, что я плохо себе представляю механизм экспорта
Да не, с экспортом у тебя все нормально, ты плохо представляешь работу линкера.