Импортиране на 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
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.