Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Импортиране на 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 не знам как става. Може и да ги имаш инсталирани, но предполагам, че ще трябва да си ги свалиш от сайта на библиотеката.


Log in to reply