Здравствуйте, гость ( Вход | Регистрация )
Iron Bug | Дата 6.6.2011, 23:03 |
а можно по подобнее про этот метод (еще лучьше какой-нибудь банальный пример) это не отдельный метод, а вместе с предыдушим: пишем отдельную библиотеку, экспортируем функции через def, а вот уже к ней цепляемся не через линковку экспортированного lib'а, а динамически, через LoadLibrary и иже с ним. в чём плюсы? в мобильности таких конструкций. библиотека может содержать базовые функции, плюс-минус нечто, что потребуется кому-то ещё, например. а в конкретном модуле подцепляются только нужные библиотеки. на самом деле, lib делает то же самое, просто у него там прописываются все функции, а это не всегда нужно и не всегда так удобно. |
|
Litkevich Yuriy | Дата 6.6.2011, 18:31 |
Если используешь Qt, то смотри QLibrary, в противном случае смотри тут | |
Гость_Vas2_* | Дата 6.6.2011, 17:41 |
Цитата(Iron Bug) либо юзать её через LoadLibrary(без .lib). я так делала, у меня работает. а можно по подобнее про этот метод (еще лучьше какой-нибудь банальный пример) |
|
Гость_Vas2_* | Дата 6.6.2011, 16:17 |
если это разные компилеры, то могут быть проблемы библиотека точно также от vs6 - а она компилится и линкуется !!! вопросы экспорта в основном следующие: несовпадение декорированных имён (если библиотека собрана без def-файла). это либо пересобрать библиотеку с def, либо писать имена функций с "хвостами", как они есть. если библиотека экспортирует классы, то скрестить мелкософт с мингвом, увы, не удастся в принципе. тогда нужно писать доп. библиотеку для msvc, которая будет линковать к себе lib, создавать класс и экспортировать чистые функции, без классов. причём собирать её надо обязательно с .def файлом, т.е. чтобы ничего лишнего там не болталось, никаких хвостов с декорированием. а потом её обрабатывать reimp'ом (причём именно 0.3, ибо 0.4 глючный). либо юзать её через LoadLibrary(без .lib). я так делала, у меня работает. спасибо за ответ , попробую лучше другой с динамической библиотекой может что толковое выйдет |
|
Iron Bug | Дата 6.6.2011, 6:58 |
если это разные компилеры, то могут быть проблемы библиотека точно также от vs6 - а она компилится и линкуется !!! вопросы экспорта в основном следующие: несовпадение декорированных имён (если библиотека собрана без def-файла). это либо пересобрать библиотеку с def, либо писать имена функций с "хвостами", как они есть. если библиотека экспортирует классы, то скрестить мелкософт с мингвом, увы, не удастся в принципе. тогда нужно писать доп. библиотеку для msvc, которая будет линковать к себе lib, создавать класс и экспортировать чистые функции, без классов. причём собирать её надо обязательно с .def файлом, т.е. чтобы ничего лишнего там не болталось, никаких хвостов с декорированием. а потом её обрабатывать reimp'ом (причём именно 0.3, ибо 0.4 глючный). либо юзать её через LoadLibrary(без .lib). я так делала, у меня работает. |
|
Vas2 | Дата 6.6.2011, 2:24 |
судя по вот этому http://forum.swamp.ru/viewtopic.php?p=1933292 сообщение от: Чт Фев 04, 2010 11:08 am можно применить утилиту reimp.exe для преобразования у меня в утилитах компилятора ее нет, скачал отдельно из архива mingw-utils-0.3.tar.gz но все равно ничего не выходит в файле документации нашел такие строки: Раскрывающийся текст If an input library contain regular objects (non-imports, i.e code and data) `reimp' will write out those objects unless you specify one of the `--only-def' and `--dump-symbols' options. You probably want to include those objects as well in the generated library. `reimp' doesn't do that automatically so you have to do it manually using `ar', like this reimp imp.lib # this generates several .o or .obj files. ar rcs libimp.a *.obj # add them to library подставил свою библиотеку, после нее выходит файл с именем "0" чуть меньшего размера и файл .а в 2.5 раза меньше изначальной библиотеки, но он все равно не подходит!!! есть утилита ranlib - но чем отличаются и как работает невыяснил, может кто подскажет чего? или может этот файл .а я в неправильное место поставил (у меня он был тут С:Qt\2010.05\mingw\lib, в принципе в файл проекта я его тоже пробовал ложить) |
|
Vas2 | Дата 5.6.2011, 18:31 |
Библиотеку качал отсюда: http://www.pcports.ru/articles/4.php Цитата Итак, создаем пустой проект консольного приложения в VS++ а ты каким компилятором ползуешься?компилятором minGW, и что библиотека скомпанованная vs6 не подойдет для линковщика minGW? предыдуще указанная библиотека точно также от vs6 - а она компилится и линкуется !!! предыдуще указанная библиотека, качал здесь http://ftp.icpdas.com.tw/pub/cd/iocard/pci...2/dll_ocx/demo/ " dll_vc6_070314.exe " |
|
Litkevich Yuriy | Дата 5.6.2011, 17:26 |
Библиотеку качал отсюда: http://www.pcports.ru/articles/4.php Цитата Итак, создаем пустой проект консольного приложения в VS++ а ты каким компилятором ползуешься? |
|
Vas2 | Дата 5.6.2011, 17:06 |
тебе на прогорге по-моему уже всё объяснили. Статически линкуемая библиотека линкуется на этапе компиляции, поэтому руками разрешать её функции не надо. может я не очень понимаю выражение (разрешать руками): я просто вызываю функции которые находятся в этой библиотеке и соответственно содержатся в хидере h.h. моя прога: status=InstallDriverWithSCManager(); if (status==false) { ... кроме добавки в файл .pro друго кода не добавлял Библиотеку качал отсюда: http://www.pcports.ru/articles/4.php посмотри namespace'ы. вроде бы портлиб имеет свой namespace. как я могу это посмотреть? |
|
Iron Bug | Дата 5.6.2011, 1:53 |
посмотри namespace'ы. вроде бы портлиб имеет свой namespace. | |
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 19.4.2024, 20:13 |