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) и подключиться два раза. Но это решение мне не нравится
  • Вопрос задан
  • 298 просмотров
Решения вопроса 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
Метода вашего класса дергает функцию в которой используется глобальная переменная. Для того что значение переменной соответсвовало экземпляру класса, она должна быть его членом.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы