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. serial port in dll
Forum Updated to NodeBB v4.3 + New Features

serial port in dll

Scheduled Pinned Locked Moved General and Desktop
dllserial port
50 Posts 4 Posters 33.9k 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.
  • C chr_sch

    @t3685

    I changed it :
    LIBS += -L C:\Users\Christian\Desktop\Studienarbeit\DLL\build-Messwert_Zuordnung_DLL-Desktop_Qt_5_4_0_MSVC2013_64bit-Debug\debug -lMesswert_Zuordnung_Dll

    Still getting the error.

    regards

    T Offline
    T Offline
    t3685
    wrote on last edited by
    #10

    @chr_sch

    Hi,

    Did you put a export macro in your class like explained in the wiki and on this page:

    http://doc.qt.io/qt-5/sharedlibrary.html

    Greetings,

    t3685

    C 1 Reply Last reply
    0
    • T t3685

      @chr_sch

      Hi,

      Did you put a export macro in your class like explained in the wiki and on this page:

      http://doc.qt.io/qt-5/sharedlibrary.html

      Greetings,

      t3685

      C Offline
      C Offline
      chr_sch
      wrote on last edited by chr_sch
      #11

      @t3685
      I added the Qt5SerialPort.lib, found somewhere in the Qt intalling folder, in the pro file under LIBS.
      This generated some new errors refers to the moc_qserialport.cpp like this:

      1.)..\debug\moc_qserialport.cpp:352: Fehler: C2027: using
      undefined Typ "QSerialPortPrivate"
      c:\users\christian\documents\build-dll_tester-desktop_qt_5_4_0_msvc2013_
      64bit-debug\debug../../dll_tester/qserialport.h(45): Declaration
      of 'QSerialPortPrivate'

      2.)..\debug\moc_qserialport.cpp:352: Fehler: C2227: to the left of
      "->_q_completeAsyncCommunication" must be an pointer to an class/strucktur/union/generic type

      regards

      T 1 Reply Last reply
      0
      • C chr_sch

        @t3685
        I added the Qt5SerialPort.lib, found somewhere in the Qt intalling folder, in the pro file under LIBS.
        This generated some new errors refers to the moc_qserialport.cpp like this:

        1.)..\debug\moc_qserialport.cpp:352: Fehler: C2027: using
        undefined Typ "QSerialPortPrivate"
        c:\users\christian\documents\build-dll_tester-desktop_qt_5_4_0_msvc2013_
        64bit-debug\debug../../dll_tester/qserialport.h(45): Declaration
        of 'QSerialPortPrivate'

        2.)..\debug\moc_qserialport.cpp:352: Fehler: C2227: to the left of
        "->_q_completeAsyncCommunication" must be an pointer to an class/strucktur/union/generic type

        regards

        T Offline
        T Offline
        t3685
        wrote on last edited by
        #12

        @chr_sch

        You don't need to add Qt5SerialPort.lib.
        The error you are getting is that the linker cannot find the implementation of "Messwert_Zuordnung_DLL::Messwert_zuordnung".
        Like I said this is either due to:

        a) incorrectly linking to your dll
        b) not declaring the function/class for export

        Both situations are explained in:

        http://doc.qt.io/qt-5/sharedlibrary.html

        So if the problem persist, please make sure that both conditions are fulfilled exactly as described in the link.

        1 Reply Last reply
        0
        • C Offline
          C Offline
          chr_sch
          wrote on last edited by chr_sch
          #13

          This is my header file:

          #if defined(MESSWERT_ZUORDNUNG_DLL_LIBRARY)
          #  define MESSWERT_ZUORDNUNG_DLLSHARED_EXPORT Q_DECL_EXPORT
          #else
          #  define MESSWERT_ZUORDNUNG_DLLSHARED_EXPORT Q_DECL_IMPORT
          #endif
          
          class MESSWERT_ZUORDNUNG_DLLSHARED_EXPORT Messwert_Zuordnung_DLL
          {
          
          public:
              Messwert_Zuordnung_DLL();
          
              void uebergabe(double messmeth,double messint, double bauteillaenge, double interpol, double anz_messungen, double abs_messungen);
          };
          

          Therefore I think it is like mentioned in the link.

          The linking to my dll consists of the following points:
          -include the header files in my tets programm (copy them in the same direction)
          -DEPENDPATH/INCLUDEPATH path to the folder where the .dll/.obj/.lib files are
          -LIBS -L Path to dll -lname of dll
          -HEADER name the headers to include

          So i followed the description in the link but I just cant see where my faults are ?!
          Should I send you my files ?

          regards

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

            Hi and welcome to devnet,

            Did you re-run qmake after adding QT += serialport ?

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

            C 1 Reply Last reply
            0
            • SGaistS SGaist

              Hi and welcome to devnet,

              Did you re-run qmake after adding QT += serialport ?

              C Offline
              C Offline
              chr_sch
              wrote on last edited by
              #15

              @SGaist

              Yes I run qmake.
              I tried to set the paths to the folder where my test program is.
              Now I get the error:
              main.obj:-1: Fehler: LNK2019:unresolved external symbol""__declspec(dllimport) public: void __cdecl Messwert_Zuordnung_DLL::uebergabe(double,double,double,double,double,double)" (_imp?uebergabe@Messwert_Zuordnung_DLL@@QEAAXNNNNNN@Z)" in function "main".

              regards

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

                Did you check that you are doing the property symbol exporting ? Define name for activating the export macro etc. ?

                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
                0
                • C chr_sch

                  This is my header file:

                  #if defined(MESSWERT_ZUORDNUNG_DLL_LIBRARY)
                  #  define MESSWERT_ZUORDNUNG_DLLSHARED_EXPORT Q_DECL_EXPORT
                  #else
                  #  define MESSWERT_ZUORDNUNG_DLLSHARED_EXPORT Q_DECL_IMPORT
                  #endif
                  
                  class MESSWERT_ZUORDNUNG_DLLSHARED_EXPORT Messwert_Zuordnung_DLL
                  {
                  
                  public:
                      Messwert_Zuordnung_DLL();
                  
                      void uebergabe(double messmeth,double messint, double bauteillaenge, double interpol, double anz_messungen, double abs_messungen);
                  };
                  

                  Therefore I think it is like mentioned in the link.

                  The linking to my dll consists of the following points:
                  -include the header files in my tets programm (copy them in the same direction)
                  -DEPENDPATH/INCLUDEPATH path to the folder where the .dll/.obj/.lib files are
                  -LIBS -L Path to dll -lname of dll
                  -HEADER name the headers to include

                  So i followed the description in the link but I just cant see where my faults are ?!
                  Should I send you my files ?

                  regards

                  T Offline
                  T Offline
                  t3685
                  wrote on last edited by
                  #17

                  @chr_sch

                  Do you this macro: MESSWERT_ZUORDNUNG_DLL_LIBRARY defined in the pro file of your library?

                  1 Reply Last reply
                  0
                  • C Offline
                    C Offline
                    chr_sch
                    wrote on last edited by
                    #18

                    I choose to use QLibrary instead of implementing the dll by myself. Therefore I used the following code in my main.cpp:

                     QLibrary library("Messwert_Zuordnung_DLL.dll");
                        if (!library.load())
                        qDebug() << library.errorString();
                        if (library.load())
                        qDebug() << "library loaded";
                    
                        library.resolve("uebergabe");
                    

                    I am not really shure, that this is the proper use of QLibrary but it builds without an error.
                    So I think it might work.
                    If my dll gives simply the value in qDebug() out which I write in the dll function in my test programm it works.
                    But if I try to establish a serial connection, my microcontroller does not recognize a input. So there is a fault in the use of the QSerialPort in my code. The same code is used in a GUI where it works. I only did not use the connect() function and in the definition of my port serial* = new QSerialPort (this) I didn´t write this. Because I have no parent object here. Do I have to establish a QObject for this ? Or is there any other problem with the use of QSerialPort in a dll ?

                    Here is my code:

                    QSerialPort *serial;
                     serial = new QSerialPort();
                    
                    
                        //+++++++++++++++++++++++++++++++++++
                        //+++++++++++++++++++++++++++++++++++
                        //COM-Port !
                    
                        serial->setPortName("COM12");
                    
                        //+++++++++++++++++++++++++++++++++++
                        //+++++++++++++++++++++++++++++++++++
                    
                    
                        serial->setBaudRate(QSerialPort::Baud115200);
                        serial->setDataBits(QSerialPort::Data8);
                        serial->setParity(QSerialPort::NoParity);
                        serial->setStopBits(QSerialPort::OneStop);
                        serial->setFlowControl(QSerialPort::SoftwareControl);
                    
                    
                        serial->open(QIODevice::ReadWrite);
                    
                    
                                //conversion of the variables for the use of the send function
                    
                    
                                QByteArray messint_s = QByteArray::number(messint);
                                QByteArray bauteillaenge_s = QByteArray::number(bauteillaenge);
                                QByteArray interpol_s = QByteArray::number(interpol);
                                QByteArray anz_messungen_s = QByteArray::number(anz_messungen);
                                QByteArray abs_messungen_s = QByteArray::number(abs_messungen);
                    
                                //Sending the variables to my microcontroller
                                serial->write("1");
                                serial->write("\n");
                    

                    regards

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

                      Was it dll_tester that you failed to link ? If so, you were not linking to the library.

                      You need to delete serial by hand when not using it anymore otherwise you'll be leaking memory

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

                      C 1 Reply Last reply
                      0
                      • SGaistS SGaist

                        Was it dll_tester that you failed to link ? If so, you were not linking to the library.

                        You need to delete serial by hand when not using it anymore otherwise you'll be leaking memory

                        C Offline
                        C Offline
                        chr_sch
                        wrote on last edited by
                        #20

                        @SGaist
                        I don´t know where my fault was. I think it was some linking problem but I don´t know how to solve so I use QLibrary.

                        Ok you mean that I have to close the serialport at the end of the dll ?
                        Can you see any other fault? Because the serial connection is not working .

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

                          You have to delete serial. IIRC that should also close it.

                          In any case, you should recheck your project and make it link properly to your library. Using QLibrary as a workaround is not the proper thing to do.

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

                          C 1 Reply Last reply
                          0
                          • SGaistS SGaist

                            You have to delete serial. IIRC that should also close it.

                            In any case, you should recheck your project and make it link properly to your library. Using QLibrary as a workaround is not the proper thing to do.

                            C Offline
                            C Offline
                            chr_sch
                            wrote on last edited by
                            #22

                            @SGaist
                            Yes but this should only be a test program to see if the dll works correctly. In the end the dll is used in an othe context, so I want to focus on the function of the dll. Alltough it would be nice to know where my fault was. But I did everything like in the description in the links above nothing works, so I have to move on to loos not more time.

                            But why doesn´t works my serial connection ? That is in the moment my biggest problem.
                            Do I have to create a QObject as parent when I don´t have a window as parent ?
                            Is the connect function necessary ?
                            I thought the use is only to refer the connection fe to a button. But in a dll it should be unnecessary.

                            Is this maybe the troublemaker?

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

                              Why it doesn't work ? I can't tell, that's Crystal Ball debugging at this point. However, you don't check that that your device opened successfully

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

                              C 1 Reply Last reply
                              0
                              • SGaistS SGaist

                                Why it doesn't work ? I can't tell, that's Crystal Ball debugging at this point. However, you don't check that that your device opened successfully

                                C Offline
                                C Offline
                                chr_sch
                                wrote on last edited by
                                #24

                                @SGaist

                                Yeah that´s kind of diffucult. But I need help because I dont´t know how to figure out where my problem is.
                                I tried in a working serial port GUI to delete the connect() function and the "this" in new QSerialPort(this). It is still working. So the code should work.

                                With : if(!serial->open(QIODevice::ReadWrite)){qDebug()<<"Connection failed"}. I figured out, that the connection is not opened.

                                I get the return value: -1073741510. Knows anybody what this means?

                                regards

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

                                  Your application has been aborted e.g. you stopped it brutally.

                                  Did you check the returned error ? What is it ?

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

                                  C 1 Reply Last reply
                                  0
                                  • SGaistS SGaist

                                    Your application has been aborted e.g. you stopped it brutally.

                                    Did you check the returned error ? What is it ?

                                    C Offline
                                    C Offline
                                    chr_sch
                                    wrote on last edited by chr_sch
                                    #26

                                    @SGaist
                                    How to check the error ? My program runs without showing an error. But there has to be one because the serial connection can´t be opened.

                                    I tried to use : qDebug()<< serial->errorString();
                                    But the output was "Unkown error".

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

                                      Ok, then just create on minimal application that opens that serial port and tries to write to / read from it. That will at least help check that your serial port is working correctly

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

                                      C 1 Reply Last reply
                                      0
                                      • SGaistS SGaist

                                        Ok, then just create on minimal application that opens that serial port and tries to write to / read from it. That will at least help check that your serial port is working correctly

                                        C Offline
                                        C Offline
                                        chr_sch
                                        wrote on last edited by
                                        #28

                                        @SGaist
                                        My first project was a GUI that communicates with that serial port.
                                        This still works fine. I used the same code to implement the serial connection in the dll file. Only the parent object, if i create the new QSerialPort, in thr parenthesis is empty. And i do not use the connect () function. If i change the code in the GUI it still works.
                                        In the GUI as well as in the dll the serial connection us only used to send a few variables to a microcontroller. So it should be a minimal requirement to the serial. Maybeit it is not possible to write a dll that opens a serial port at runtime ?

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

                                          There's no such restriction.

                                          Since you had trouble with the library in the first place, the next step is to create a minimal library that will provide some dummy function and link to it. Don't use QLibrary to load, just make your application link to it properly.

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

                                          C 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