Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: NetWorm от Март 10, 2012, 21:40



Название: Создание и использование динамических библиотек.
Отправлено: NetWorm от Март 10, 2012, 21:40
Вобщем вопрос такой! Есть некий каркас программы. Главное окно! Сама программа состоит из трех модулей. Например отдел кадров, касса и склад! Необходимо сделать это модульное... т.е. основная программа должна работать загружать либо модуль кассы, либо отдела кадров и прочее.. Соответственно сама библиотека должна содержать диалоговые окна и уметь работать с базами данных... грубо говоря можно написать 3 отдельных программы, но хочется это разделить на 3 dllки и подключать их по необходимости...


Название: Re: Создание и использование динамических библиотек.
Отправлено: Rem Norton от Март 10, 2012, 22:08
А в чем вопрос то? ???


Название: Re: Создание и использование динамических библиотек.
Отправлено: Kurles от Март 10, 2012, 22:19
QLibrary (http://qt-project.org/doc/qt-4.8/qlibrary.html). Если модули между собой никак не связаны, кроме как через общую БД, вытаскиваешь одну функцию, к примеру
Код
C
void StartModule();
Которая будет запускать нужный тебе функционал из нужной тебе длл.


Название: Re: Создание и использование динамических библиотек.
Отправлено: NetWorm от Март 11, 2012, 06:29
Вот тут накидал для примера!
Код:
#ifndef LIB_H
#define LIB_H

#include "lib__global.h"
#include "form.h"

class LIB_SHARED_EXPORT Lib {
public:
    Lib();
    void startModule();

};

#endif // LIB_H
Код:
void Lib::startModule(){
    Form *frm = new Form;
    frm->show();
}

Данная функция открывает форму.
В результате создался файл lib_.dll
Теперь пытаюсь вызвать эту функцию, хочу чтобы открылась форма которая находится в dll...
Код:
    QApplication::addLibraryPath("D:/QT/libs/bin");
    QLibrary myLib("lib_");

    typedef void (*MyPrototype)();
    MyPrototype myFunction =(MyPrototype) myLib.resolve("startModule");
    if (myFunction)
        myFunction();

Но вот почему то ничего не происходит... Если пробежаться дебагером, то myFunction(); заходит


Название: Re: Создание и использование динамических библиотек.
Отправлено: NetWorm от Март 11, 2012, 07:31
так вроде стало ясно надо было еще добавить extern "C" перед void LIB_SHARED_EXPORT startModule()... А саму функцию startModule() вынести из класса...


Название: Re: Создание и использование динамических библиотек.
Отправлено: SASA от Март 11, 2012, 15:10
Посмотрите QPlugin.