Экспорт функций в .dll из статической .lib
От: Gendolph  
Дата: 12.09.11 10:49
Оценка:
Поясню.
Есть .lib. В ней реализованы мои функции.
Есть .dll, которая подключает вышеуказанную статическую .lib
Можно ли в .dll экспортировать функции из .lib?

Гугл ничего нормального не выдает Может я поиском пользоваться не умею?
Где-то на форуме видел схожую ветку. Но проблема в том, что .lib реализует функции, которые дёргаются самой ОС Windows.
Поэтому объявление функций предоставлено ею же и я не могу указать __declspec(dllexport) — при компиляции .lib появляются ошибки переопределения функции.
Могу использовать только .def для экспорта.
Все, что нашел в MSDN, это перенаправление (func=anotherDll.func), но так не работает, видимо, нужна другая dll, а не lib.

Сами функции вызываются из создаваемой dll, но можно ли избежать "прослойки" типа:
DllFunc()
{
    LibFunс(); 
}


Буду рад любой информации или ссылки на материалы.
Re: Экспорт функций в .dll из статической .lib
От: uzhas Ниоткуда  
Дата: 12.09.11 10:54
Оценка:
Здравствуйте, Gendolph, Вы писали:

G>Все, что нашел в MSDN, это перенаправление (func=anotherDll.func), но так не работает, видимо, нужна другая dll, а не lib.


G>Сами функции вызываются из создаваемой dll, но можно ли избежать "прослойки" типа:

G>
G>DllFunc()
G>{
G>    LibFunс(); 
G>}
G>


это первое, что приходит в голову
почему вас такой вариант не устраивает? имена подфиксить можно с помощью .def файла
Re[2]: Экспорт функций в .dll из статической .lib
От: Gendolph  
Дата: 12.09.11 11:03
Оценка:
Здравствуйте, uzhas, Вы писали:

G>>
G>>DllFunc()
G>>{
G>>    LibFunс(); 
G>>}
G>>


U>это первое, что приходит в голову

U>почему вас такой вариант не устраивает? имена подфиксить можно с помощью .def файла

Я так понимаю, что так работать будет чуть-чуть дольше (все-таки лишний вызов функции), да и некрасиво как-то.
Хотелось бы более элегантного решения

Может я что-то неправильно делаю — разве не достаточно просто указать lib-функцию в def файле, если в самой dll эта функция видна?
Re[3]: Экспорт функций в .dll из статической .lib
От: uzhas Ниоткуда  
Дата: 12.09.11 11:11
Оценка: -1
Здравствуйте, Gendolph, Вы писали:

G>Я так понимаю, что так работать будет чуть-чуть дольше (все-таки лишний вызов функции), да и некрасиво как-то.

G>Хотелось бы более элегантного решения
что-то не видно от вас аргументов против этого метода
более качественные аргументы могли бы звучать так:
1) требуется много усилий для выявления функций для экспорта
2) требуется много времени для написания таких делегатов
3) очень высока вероятность допустить ошибку при написани таких делегатов, т.к. идет дублирование сигнатур функций
и тд
так что рекомендую освоить пока этот метод.

G>Может я что-то неправильно делаю — разве не достаточно просто указать lib-функцию в def файле, если в самой dll эта функция видна?

нужно понимать, что экспортированные функции подчиняются более строгим правилам, нежели простые функции в либе: у них свои конвенции вызова
поэтому легким способом вам не вытаращить функцию из либы наружу
Re: Экспорт функций в .dll из статической .lib
От: MasterZiv СССР  
Дата: 12.09.11 11:44
Оценка:
On 12.09.2011 14:49, Gendolph wrote:

> Есть .lib. В ней реализованы мои функции.

> Есть .dll, которая подключает вышеуказанную статическую .lib
> Можно ли в .dll экспортировать функции из .lib?

Нет.

Либо собрать библиотеку (.lib) тоже в виде .dll,
либо в твоей .dll сделать свои функции-обёртки для каждой
из экспортируемой функции из .lib, и проэкспортировать их.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Экспорт функций в .dll из статической .lib
От: MasterZiv СССР  
Дата: 12.09.11 11:46
Оценка:
On 12.09.2011 15:03, Gendolph wrote:

> Может я что-то неправильно делаю — разве не достаточно просто указать

> lib-функцию в def файле, если в самой dll эта функция видна?

в def нельзя библиотеку указат. Наоборот, по .def генерируется библиотека
импорта (.lib, но другая).
Posted via RSDN NNTP Server 2.1 beta
Re: Экспорт функций в .dll из статической .lib
От: Gendolph  
Дата: 12.09.11 12:36
Оценка:
Спасибо за комментарии. Придется делать обертки...
Re: Экспорт функций в .dll из статической .lib
От: Gendolph  
Дата: 12.09.11 13:20
Оценка:
Проблема решена.

Может я что-то неправильно делаю — разве не достаточно просто указать lib-функцию в def файле, если в самой dll эта функция видна?

Достаточно или нет не знаю, но работает.
Оказывается, .def файл не был подключен к линкеру, хоть и создавался кликом правой кнопки на проекте->Add->New Item->Module Definition File

Теперь, просто подключив .lib к .dll и указав LibFunc в .def все работает.

Все равно всем спасибо за ответы
Re[2]: Экспорт функций в .dll из статической .lib
От: uzhas Ниоткуда  
Дата: 12.09.11 17:53
Оценка:
Здравствуйте, Gendolph, Вы писали:

G>Теперь, просто подключив .lib к .dll и указав LibFunc в .def все работает.

поздравляю
получается, что я плохо себе представляю механизм экспорта
Re[3]: Экспорт функций в .dll из статической .lib
От: Аноним  
Дата: 12.09.11 18:37
Оценка:
U>получается, что я плохо себе представляю механизм экспорта

Да не, с экспортом у тебя все нормально, ты плохо представляешь работу линкера.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.