Il_noor
@Il_noor
Физик

Как подключить одну внешнюю библиотеку с помощью QLibrary и работать с двумя приборами независимо?

Всем привет)
Создал библиотеку, который имеет такую функцию:
float getFloat(){
    result_float = (float)i++; //для теста, потом здесь будут данные, которые считываются с прибора
    return result_float;  
}


Создал класс для работы с библиотеками:
class ConnectComDevice
{
private: 
    float result;

public:
    void getFloat()
    {
        QLibrary lib ( LIB_NAME );
        if( !lib.load() ) {
            qDebug() << "Loading failed!";
        }
        
        typedef float ( *outputFloat )();
        outputFloat outputFloatd;
        for (int i=0; i<5; i++)
        {
            outputFloatd = ( outputFloat ) lib.resolve( "getFloat" );
            if( outputFloatd ) {
                qDebug() << outputFloatd();
            }
        }
    }

};


объявляю два объекта класса:
ConnectComDevice connectDevice();
connectDevice.getFloat();

ConnectComDevice connectDevice1();
connectDevice1.getFloat();


Вроде бы как должен получить:
spoiler
0
1
2
3
4
5

0
1
2
3
4


но получаю:
spoiler

0
1
2
3
4
5
6
7
8
9


т.е работает как один класс, а мне нужно чтоб они работали независимо.
Как это можно реализовать?
p.s:
spoiler
работают независимо, если создать копию dll (first.dll second.dll) и подключиться два раза. Но это решение мне не нравится
  • Вопрос задан
  • 239 просмотров
Решения вопроса 2
Zifix
@Zifix Куратор тега Qt
Barbatum
Объявите класс внутри библиотеки, подключите библиотеку, создайте два объекта вашего класса в программе, и используйте их.

Сейчас вы пытаетесь подключить библиотеку два раза, это не имеет смысла. Ну и потом, QLibrary тоже необязательно, достаточно прописать в pro файле файл библиотеки и хеадер: doc.qt.io/qtcreator/creator-project-qmake-librarie...
Ответ написан
Il_noor
@Il_noor Автор вопроса
Физик
Решение:
DLL:
class ClassLA
{
private:
    float result_float;
    int i_test=0;

public:
    float getFloat(){

        result_float = (float)i_test++;
        return result_float;
    }
};
ClassLA la[5];


float getFloat(int number_of_device){
    return la[number_of_device].getFloat();
}


Программа:
QLibrary lib ( LIB_NAME );
        typedef float ( *outputFloat )(int);
        outputFloat outputFloatd;
        for (int i=0; i<14; i++)
        {
            outputFloatd = ( outputFloat ) lib.resolve( "getFloat" );
            if( outputFloatd ) {
                qDebug() << outputFloatd(number_of_device);
            }
        }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@polar_winter
Метода вашего класса дергает функцию в которой используется глобальная переменная. Для того что значение переменной соответсвовало экземпляру класса, она должна быть его членом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы