Russian Qt Forum
Ноябрь 01, 2024, 05:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание и использование динамических библиотек.  (Прочитано 5122 раз)
NetWorm
Гость
« : Март 10, 2012, 21:40 »

Вобщем вопрос такой! Есть некий каркас программы. Главное окно! Сама программа состоит из трех модулей. Например отдел кадров, касса и склад! Необходимо сделать это модульное... т.е. основная программа должна работать загружать либо модуль кассы, либо отдела кадров и прочее.. Соответственно сама библиотека должна содержать диалоговые окна и уметь работать с базами данных... грубо говоря можно написать 3 отдельных программы, но хочется это разделить на 3 dllки и подключать их по необходимости...
Записан
Rem Norton
Гость
« Ответ #1 : Март 10, 2012, 22:08 »

А в чем вопрос то? Непонимающий
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #2 : Март 10, 2012, 22:19 »

QLibrary. Если модули между собой никак не связаны, кроме как через общую БД, вытаскиваешь одну функцию, к примеру
Код
C
void StartModule();
Которая будет запускать нужный тебе функционал из нужной тебе длл.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
NetWorm
Гость
« Ответ #3 : Март 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(); заходит
Записан
NetWorm
Гость
« Ответ #4 : Март 11, 2012, 07:31 »

так вроде стало ясно надо было еще добавить extern "C" перед void LIB_SHARED_EXPORT startModule()... А саму функцию startModule() вынести из класса...
« Последнее редактирование: Март 11, 2012, 07:33 от NetWorm » Записан
SASA
Гость
« Ответ #5 : Март 11, 2012, 15:10 »

Посмотрите QPlugin.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.422 секунд. Запросов: 23.