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

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

Войти через TM ID
Похожие вопросы
HARMAN Connected Services Нижний Новгород
от 60 000 до 120 000 руб.
Soft Media Int. Пенза
от 125 000 до 225 000 руб.
ООО ЭНЕРГИЯ Новосибирск
от 60 000 до 90 000 руб.