Импортиране на dll файлове
-
Здравейте :)
Въпроса ми е дали някой е импортирал .dll файлове в проекта си и как става номера ? Доколкото разбрах има два метода:
Първият е да се включи с LIBS += ,а другият е с QLibrary. Кой от двата според вас е по-добър ? -
Здравей,
QLibrary зарежда библиотеката по време на изпълнение и ти позволява да търсиш за символи в нея и да изпълняваш намерените резултати.
За пример:
@
QLibrary myLib("mylib");
typedef void (*MyPrototype)();
MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
if (myFunction)
myFunction();
@LIBS линква библиотеката с товята програма, по време на компилация. Т.е ако използваш функция от дадената библиотека, линкера ще я свърже. Ако не си задал библиотеката, линкера няма да може да намери функцията и ще ти даде грешка.
В общи линии зависи от това какво искаш да направиш.
-
[quote author="HerpaMoTeH" date="1321284532"]Здравейте :)
Въпроса ми е дали някой е импортирал .dll файлове в проекта си и как става номера ? ?[/quote][quote author="task_struct" date="1321287336"]QLibrary зарежда библиотеката по време на изпълнение и ти позволява да търсиш за символи в нея и да изпълняваш намерените резултати.
[/quote]И с оглед на това, че DLL са динамични билиотеки за windows, които предполагат свързване по време на изпълнение, по-добре е да се зареждат именно по време на изпълнение на приложението с "QLibrary":http://doc.qt.nokia.com/latest/qlibrary.html.
-
Аз си представям QLibrary като абстракция около "dlopen() за Линукс и еквивалента на за Win":http://pubs.opengroup.org/onlinepubs/009695399/functions/dlopen.html , т.е да се използва за зареждане на плъгини. Примерно твоето приложение има много функционалности, но клиента не се нуждае от тях непрекъснато, и за да намалиш времето за зареждане на приложението, зареждаш плъгина, когато има нужда от него.
-
Значи, ако съм разбрал правилно с QLibrary мога да достъпя и използвам функциите на библиотеката, ако открие съответсвие в самата библиотека. Това, което търся е да отвори dll файла по същия както се отварят библиотеките, т.е. като започна да пиша функцията да ми излезе предложение за дописване на функцията.
-
Това ще ти излезе, ако посочиш къде се намират хедър фейловете с декларациите на класовете/функциите в библиотеката. Виж "INCLUDEPATH":http://doc.qt.nokia.com/stable/qmake-variable-reference.html#includepath . Qt Creator, както и всички останали IDE-та просто парсват хедър файловете и си създават хеш таблици от дефинциите на променливи, функции, класове и когато пишеш търсят в тях.
-
А хедър файла съдържа ли се в .dll файла? DLL, който смятам да ползвам съдържа платен компонент. Самият dll е писан на C#, работи на VB.NET, но също така пише, че работи и на C++.
-
Не. dll-а съдъжа изпълнимият код, който после се свързва с твоята програма, когато тя се стартира. За това се наричат динамични библиотеки. Хедър файловете попринцип се инсталират отделно. На Windows не знам как става. Може и да ги имаш инсталирани, но предполагам, че ще трябва да си ги свалиш от сайта на библиотеката.