Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. As dynamic libraries to use class variables?
Forum Updated to NodeBB v4.3 + New Features

As dynamic libraries to use class variables?

Scheduled Pinned Locked Moved Solved General and Desktop
50 Posts 4 Posters 13.0k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    Mikee
    wrote on last edited by
    #21

    I can call the void StrategyCod() .
    I did:
    strategycod.h:

    #ifndef STRATEGYCOD_H
    #define STRATEGYCOD_H
    
    #include "strategycod_global.h"
    
    
    extern "C" {STRATEGYCODSHARED_EXPORT void StrategyCod(MainWinow * main);}
    
    class STRATEGYCODSHARED_EXPORT StrategyCod
    {
    
    //public:
       // StrategyCod1();
    };
    
    #endif // STRATEGYCOD_H
    

    strategycod.cpp:

    #include "strategycod.h"
    #include <QDebug>
    //#include "C:\\Qt\project\\MyCandleSrick\\mainwindow.h"
    //#include <mainwindow>
    //StrategyCod::StrategyCod1(){qDebug()<<"Library work1";}
    
    
    
    void StrategyCod(MainWinow * main)
    {
        //MainWindow w;
        qDebug()<<"Library work2";//<<w.NBar;
    }
    

    6 errors:
    C:\Qt\project\StrategyCod\strategycod.h:7: error: variable or field 'StrategyCod' declared void
    extern "C" {STRATEGYCODSHARED_EXPORT void StrategyCod(MainWinow * main);}
    ^
    C:\Qt\project\StrategyCod\strategycod.h:7: error: 'MainWinow' was not declared in this scope
    C:\Qt\project\StrategyCod\strategycod.h:7: error: 'main' was not declared in this scope
    extern "C" {STRATEGYCODSHARED_EXPORT void StrategyCod(MainWinow * main);}
    ^
    C:\Qt\project\StrategyCod\strategycod.cpp:9: оerror: variable or field 'StrategyCod' declared void
    void StrategyCod(MainWinow * main)
    ^
    C:\Qt\project\StrategyCod\strategycod.cpp:9: error: 'MainWinow' was not declared in this scope
    C:\Qt\project\StrategyCod\strategycod.cpp:9: error: 'main' was not declared in this scope
    void StrategyCod(MainWinow * main)
    ^

    mrjjM 1 Reply Last reply
    0
    • M Mikee

      I can call the void StrategyCod() .
      I did:
      strategycod.h:

      #ifndef STRATEGYCOD_H
      #define STRATEGYCOD_H
      
      #include "strategycod_global.h"
      
      
      extern "C" {STRATEGYCODSHARED_EXPORT void StrategyCod(MainWinow * main);}
      
      class STRATEGYCODSHARED_EXPORT StrategyCod
      {
      
      //public:
         // StrategyCod1();
      };
      
      #endif // STRATEGYCOD_H
      

      strategycod.cpp:

      #include "strategycod.h"
      #include <QDebug>
      //#include "C:\\Qt\project\\MyCandleSrick\\mainwindow.h"
      //#include <mainwindow>
      //StrategyCod::StrategyCod1(){qDebug()<<"Library work1";}
      
      
      
      void StrategyCod(MainWinow * main)
      {
          //MainWindow w;
          qDebug()<<"Library work2";//<<w.NBar;
      }
      

      6 errors:
      C:\Qt\project\StrategyCod\strategycod.h:7: error: variable or field 'StrategyCod' declared void
      extern "C" {STRATEGYCODSHARED_EXPORT void StrategyCod(MainWinow * main);}
      ^
      C:\Qt\project\StrategyCod\strategycod.h:7: error: 'MainWinow' was not declared in this scope
      C:\Qt\project\StrategyCod\strategycod.h:7: error: 'main' was not declared in this scope
      extern "C" {STRATEGYCODSHARED_EXPORT void StrategyCod(MainWinow * main);}
      ^
      C:\Qt\project\StrategyCod\strategycod.cpp:9: оerror: variable or field 'StrategyCod' declared void
      void StrategyCod(MainWinow * main)
      ^
      C:\Qt\project\StrategyCod\strategycod.cpp:9: error: 'MainWinow' was not declared in this scope
      C:\Qt\project\StrategyCod\strategycod.cpp:9: error: 'main' was not declared in this scope
      void StrategyCod(MainWinow * main)
      ^

      mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #22

      Hi
      You must include mainwindw.h so it knows type

      trategycod.cpp:
      #include "mainwindow.h" // should know where to find it due to the INCLUDEPATH in .pro file

      1 Reply Last reply
      1
      • M Offline
        M Offline
        Mikee
        wrote on last edited by Mikee
        #23

        When i do this same error appers:
        C:\Qt\project\MyCandleSrick\mainwindow.h:4: error: QMainWindow: No such file or directory

        In the file C:/Qt/project/MyCandleSrick/mainwindow.h:
        4:#include <QMainWindow>

        mrjjM 1 Reply Last reply
        0
        • M Mikee

          When i do this same error appers:
          C:\Qt\project\MyCandleSrick\mainwindow.h:4: error: QMainWindow: No such file or directory

          In the file C:/Qt/project/MyCandleSrick/mainwindow.h:
          4:#include <QMainWindow>

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by mrjj
          #24

          @Mikee
          Well you library is with

          QT -= gui

          so it dont know QMainwindow type ( or any Qt widget type)

          1 Reply Last reply
          1
          • M Offline
            M Offline
            Mikee
            wrote on last edited by
            #25

            I fixed strategycod.pro:

            QT       += core gui
            
            TARGET = StrategyCod
            TEMPLATE = lib
            
            DEFINES += STRATEGYCOD_LIBRARY
            DEFINES += QT_DEPRECATED_WARNINGS
            SOURCES += \
                    strategycod.cpp
            
            HEADERS += \
                    strategycod.h \
                    strategycod_global.h 
            
            unix {
                target.path = /usr/lib
                INSTALLS += target
            }
            INCLUDEPATH = "C:/Qt/project/MyCandleSrick"
            

            But the error is the same.

            1 Reply Last reply
            0
            • M Offline
              M Offline
              Mikee
              wrote on last edited by
              #26

              I done this in strategycod.pro

              INCLUDEPATH = "C:/Qt/project/MyCandleSrick"  "C:/Qt/Qt5.9.2/5.9.2/Src/qtbase/include/QtWidgets"
              

              Now it included <QMainWindow>. But it isnt working now

              extern "C" {STRATEGYCODSHARED_EXPORT void StrategyCod(MainWinow * main);}
              

              and

              void StrategyCod(MainWinow * main)
              

              errors:
              C:\Qt\project\StrategyCod\strategycod.h:7: error: variable or field 'StrategyCod' declared void
              extern "C" {STRATEGYCODSHARED_EXPORT void StrategyCod(MainWinow * main);}
              ^
              C:\Qt\project\StrategyCod\strategycod.h:7: error: 'MainWinow' was not declared in this scope
              C:\Qt\project\StrategyCod\strategycod.h:7: error: 'main' was not declared in this scope
              extern "C" {STRATEGYCODSHARED_EXPORT void StrategyCod(MainWinow * main);}
              ^
              C:\Qt\project\StrategyCod\strategycod.cpp:9: оerror: variable or field 'StrategyCod' declared void
              void StrategyCod(MainWinow * main)
              ^
              C:\Qt\project\StrategyCod\strategycod.cpp:9: error: 'MainWinow' was not declared in this scope
              C:\Qt\project\StrategyCod\strategycod.cpp:9: error: 'main' was not declared in this scope
              void StrategyCod(MainWinow * main)

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #27

                Because when you do INCLUDEPATH = you replace the content of that variable with what follows. Use INCLUDEPATH += to append your folders to it.

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                2
                • M Offline
                  M Offline
                  Mikee
                  wrote on last edited by
                  #28

                  Now all includes are working.
                  When I use function

                  void StrategyCod(MainWindow * main)
                  {
                      //MainWindow w;
                      main->NBar;
                      qDebug()<<"Library work2"<<main->NBar;//<<w.NBar;
                  }
                  

                  qDebug message is not a valid value NBar

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    Mikee
                    wrote on last edited by
                    #29

                    I think that need to do reference class variable. But this code isn't working

                    void StrategyCod(/*MainWindow * main*/)
                    {
                        long long &NBar1 =MainWindow.NBar;
                        qDebug()<<"Library work2";//<<w.NBar;
                    }
                    
                    

                    How can i do reference?

                    mrjjM 1 Reply Last reply
                    0
                    • M Mikee

                      I think that need to do reference class variable. But this code isn't working

                      void StrategyCod(/*MainWindow * main*/)
                      {
                          long long &NBar1 =MainWindow.NBar;
                          qDebug()<<"Library work2";//<<w.NBar;
                      }
                      
                      

                      How can i do reference?

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by mrjj
                      #30

                      @Mikee

                      via the parameter ( main or what u called it)

                      void StrategyCod(MainWindow * main) {
                          qDebug()<<"Library work2"<<main->NBar;
                      }
                      

                      if NBAr is wrong, then something else is wrong. not the function
                      it might be you call StrategyCod BEFORE setting it in mainwindow or
                      something like that.

                      1 Reply Last reply
                      0
                      • M Offline
                        M Offline
                        Mikee
                        wrote on last edited by
                        #31

                        I checked:
                        library:
                        void StrategyCod(double Parametr)

                        {
                            MainWindow *w;
                            qDebug()<<"Library work2"<<Parametr<<w->NBar;
                        }
                        

                        main.cpp:

                        QLibrary MyLib("C:\\Qt\\project\\build-StrategyCod-Desktop_Qt_5_9_2_MinGW_32bit-Debug\\debug\\StrategyCod");  
                            MyLib.load();
                            typedef void (*MyPrototype)();
                            MyPrototype StrategyCod = (MyPrototype) MyLib.resolve("StrategyCod");
                            qDebug()<<w.NBar;  //NBar=0 is hear 
                            StrategyCod();  //NBar=5943858560 is hear 
                            MyLib.unload();
                        

                        Maybe here typedef void (*MyPrototype)(); need append void (*MyPrototype)(class); ?

                        mrjjM 1 Reply Last reply
                        0
                        • M Mikee

                          I checked:
                          library:
                          void StrategyCod(double Parametr)

                          {
                              MainWindow *w;
                              qDebug()<<"Library work2"<<Parametr<<w->NBar;
                          }
                          

                          main.cpp:

                          QLibrary MyLib("C:\\Qt\\project\\build-StrategyCod-Desktop_Qt_5_9_2_MinGW_32bit-Debug\\debug\\StrategyCod");  
                              MyLib.load();
                              typedef void (*MyPrototype)();
                              MyPrototype StrategyCod = (MyPrototype) MyLib.resolve("StrategyCod");
                              qDebug()<<w.NBar;  //NBar=0 is hear 
                              StrategyCod();  //NBar=5943858560 is hear 
                              MyLib.unload();
                          

                          Maybe here typedef void (*MyPrototype)(); need append void (*MyPrototype)(class); ?

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by
                          #32

                          @Mikee
                          Yes it must all match.

                          typedef void (*MyPrototype)();

                          means pointer to function takes no parameters
                          which is untrue.

                          1 Reply Last reply
                          0
                          • M Offline
                            M Offline
                            Mikee
                            wrote on last edited by
                            #33

                            But what to do with NBar?

                            void StrategyCod()
                            {
                                MainWindow *w;
                                qDebug()<<"Library work2"<<w->NBar;
                              
                            }
                            
                            jsulmJ 1 Reply Last reply
                            0
                            • M Mikee

                              But what to do with NBar?

                              void StrategyCod()
                              {
                                  MainWindow *w;
                                  qDebug()<<"Library work2"<<w->NBar;
                                
                              }
                              
                              jsulmJ Offline
                              jsulmJ Offline
                              jsulm
                              Lifetime Qt Champion
                              wrote on last edited by
                              #34

                              @Mikee

                              typedef void (*MyPrototype)(MainWindow *w);
                              

                              https://forum.qt.io/topic/113070/qt-code-of-conduct

                              1 Reply Last reply
                              0
                              • M Offline
                                M Offline
                                Mikee
                                wrote on last edited by Mikee
                                #35

                                I have done this and it's working

                                 QLibrary MyLib("C:\\Qt\\project\\build-StrategyCod-Desktop_Qt_5_9_2_MinGW_32bit-Debug\\debug\\StrategyCod");  
                                    MyLib.load();
                                    typedef void (*MyPrototype)(MainWindow *);
                                    MyPrototype StrategyCod = (MyPrototype) MyLib.resolve("StrategyCod");
                                    StrategyCod(&w);  
                                    qDebug()<<"q1"<< q1;
                                    MyLib.unload();
                                

                                Thank you

                                1 Reply Last reply
                                1
                                • mrjjM Offline
                                  mrjjM Offline
                                  mrjj
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #36

                                  Congrats :)

                                  1 Reply Last reply
                                  1
                                  • M Offline
                                    M Offline
                                    Mikee
                                    wrote on last edited by
                                    #37

                                    I have are new problem.

                                    qDebug()<<NBar;
                                    

                                    return NBar=1064,

                                    qDebug()<<"Library work2"<< Parametr<<w->NBar;
                                    

                                    return NBar=0
                                    In class MainWindow:

                                    void MainWindow::on_ButtonRuneOne_clicked()//запуск стратегии на одном ядре
                                    {
                                        bool ok;
                                        double d = QInputDialog::getDouble(this, tr("ParametrForStrategy"),
                                                                               tr("double:"), 37.56, -100000, 100000, 6, &ok);
                                        if (ok) {ParametrForStrategyCod=d; }
                                    
                                        QLibrary MyLib("C:\\Qt\\project\\build-StrategyCod-Desktop_Qt_5_9_2_MinGW_32bit-Debug\\debug\\StrategyCod");  
                                        MyLib.load();
                                        typedef void (*MyPrototype)(double,MainWindow *);
                                        MyPrototype StrategyCod = (MyPrototype) MyLib.resolve("StrategyCod");
                                        MainWindow w;
                                        qDebug()<<NBar;
                                        StrategyCod(ParametrForStrategyCod,&w);  /
                                        MyLib.unload();
                                    }
                                    

                                    In library:

                                    void StrategyCod(double Parametr, MainWindow *w)
                                    {
                                        qDebug()<<"Library work2"<< Parametr<<w->NBar;
                                    }
                                    

                                    But in main.cpp it works good. How can I fix problem with link of object class?

                                    1 Reply Last reply
                                    0
                                    • SGaistS Offline
                                      SGaistS Offline
                                      SGaist
                                      Lifetime Qt Champion
                                      wrote on last edited by
                                      #38

                                      You're passing w to your method which is not the current MainWindow object you are calling StrategyCod from.

                                      Pass this to the method.

                                      On a side note, you are doing some pretty convoluted stuff here for what seems to be a pretty simple task. I'd encourage you to re-think a bit the design of your application.

                                      Interested in AI ? www.idiap.ch
                                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                      1 Reply Last reply
                                      3
                                      • M Offline
                                        M Offline
                                        Mikee
                                        wrote on last edited by
                                        #39

                                        Thank you. I wrote it like this

                                        StrategyCod(ParametrForStrategyCod,this); 
                                        

                                        and it works

                                        1 Reply Last reply
                                        0
                                        • M Offline
                                          M Offline
                                          Mikee
                                          wrote on last edited by
                                          #40

                                          How can I create lamda function in the slot of the class?

                                          
                                                 QVector <double> Perebor1;
                                                 for (double i=d1;i<=d2;i=i+d3) 
                                                 {
                                                     Perebor1.append(i);
                                                 }
                                                 QLibrary MyLib("C:\\Qt\\project\\build-StrategyCod-Desktop_Qt_5_9_2_MinGW_32bit-Debug\\debug\\StrategyCod");  
                                                 MyLib.load();
                                                 typedef void (*MyPrototype)(double,MainWindow *);
                                                 MyPrototype StrategyCod = (MyPrototype) MyLib.resolve("StrategyCod");
                                                 //StrategyCod(ParametrForStrategyCod,this);  
                                                 QFuture<void> Perebor2 = QtConcurrent::map(Perebor1,[&](const double& d){ StrategyCod(d,this);}); 
                                                 MyLib.unload();
                                          
                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved