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. [Solved] COM interface to CANoe
Forum Updated to NodeBB v4.3 + New Features

[Solved] COM interface to CANoe

Scheduled Pinned Locked Moved General and Desktop
16 Posts 5 Posters 13.0k Views 2 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.
  • L Offline
    L Offline
    la-ga
    wrote on last edited by
    #6

    How can I link to ole32.lib in Qt? I doesn't find it on my PC. Only the ole32.dll....

    What do you mean with the possible CoCreateInstance() results? Do you mean the error code saved in HRESULT result?

    1 Reply Last reply
    0
    • N Offline
      N Offline
      NicuPopescu
      wrote on last edited by
      #7

      bq. How can I link to ole32.lib in Qt? I doesn’t find it on my PC. Only the ole32.dll….

      i.e. here is in C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib\
      better to copy it locally to your project in a "lib" folder and have in .pro file

      @LIBS += ../lib/ole32.lib@

      bq. What do you mean with the possible CoCreateInstance() results? Do you mean the error code saved in HRESULT result?

      yes

      L.E. I checked your initial code and it works ...

      1 Reply Last reply
      0
      • L Offline
        L Offline
        la-ga
        wrote on last edited by
        #8

        [quote author="NicuPopescu" date="1386863709"]i.e. here is in C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib\ better to copy it locally to your project in a "lib" folder and have in .pro file [/quote]

        I tried to add the library to my project:

        • I copied the Ole32.Lib out of the Microsoft SDK folder to my project directory

        • Then I added the following code to my pro file:

        @
        LIBS += C:/QtProject/3com_interface/libs/Ole32.Lib
        @

        But I get actually the same error:

        "undefined reference to '_GUID const& __mingw_uuidof<IApplication>()'

        Do I need some files more, for example the Ole32.dll?

        But I'm wondering that my code works correctly in your project. Could you post your code or your project so I can search for the differences?

        1 Reply Last reply
        0
        • L Offline
          L Offline
          la-ga
          wrote on last edited by
          #9

          Any ideas?

          I have still the same problem: How can I get the IID of a COM-Application to create the COM interface?

          There are two possibilities:

          1. Is there an alternative to __uuidof() to get the IID of the object?
          2. What do I need to add to my project, so I can use __uuidof() and how can I add this?

          Thank you for all answers so far!

          1 Reply Last reply
          0
          • N Offline
            N Offline
            NicuPopescu
            wrote on last edited by
            #10

            bq. Do I need some files more, for example the Ole32.dll?

            dll will be found in system32, so no worry

            I don't know why it is so difficult for you to get the project compiled; just in case I paste exactly what I have in main window project:

            .pro file:

            @#-------------------------------------------------

            Project created by QtCreator 2013-12-13T16:39:39

            #-------------------------------------------------

            QT += core gui

            greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

            TARGET = TestCANoeCOM
            TEMPLATE = app

            SOURCES += main.cpp
            mainwindow.cpp

            HEADERS += mainwindow.h

            FORMS += mainwindow.ui

            LIBS += ../TestCANoeCOM/lib/ole32.lib@

            path in LIBS depends on your projetc build directory in QtCreator's Projects panel

            in mainwindow.cpp

            @#include "mainwindow.h"
            #include "ui_mainwindow.h"
            #include <QDebug>

            #include "C:\Program Files\Vector CANoe 7.5\Exec32\COMdev\canoe.h"

            MainWindow::MainWindow(QWidget *parent) :
            QMainWindow(parent),
            ui(new Ui::MainWindow)
            {
            ui->setupUi(this);

            IApplication* pIApp;
            HRESULT result;
            
            result = CoInitialize(NULL);
            
            CLSID clsid;
            result = CLSIDFromProgID(L"CANoe.Application", &clsid);
            
            if(SUCCEEDED(result))
            {
                qDebug() << "CLSID saved";
            }
            
            const IID IID_IApplication = __uuidof(IApplication);
            
            result = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IApplication, (void**) &pIApp);
            
            if(SUCCEEDED(result))
            {
                qDebug() << "Connection established";
            }
            

            }

            MainWindow::~MainWindow()
            {
            delete ui;
            }
            @

            nothing different to your first code ...

            bq. How can I get the IID of a COM-Application to create the COM interface?

            in registry HKEY_CLASSES_ROOT->PID (i.e CANoe.Application)->CLSID(Value)

            and in HKEY_CLASSES_ROOT->CLSID->Value(found above)->InprocServer32 , you can find more info on COM server registration like:
            LocalServer32=path to exe, ocx, dll into which your COM implementation resides

            hope it helps! :)

            1 Reply Last reply
            0
            • L Offline
              L Offline
              la-ga
              wrote on last edited by
              #11

              Hello NicuPopescu,

              I've found my mistake. Thank you for posting your code. You've helped me a lot!

              A 1 Reply Last reply
              0
              • N Offline
                N Offline
                NicuPopescu
                wrote on last edited by
                #12

                you're welcome! :)

                hope the answers help other fellows here ...

                1 Reply Last reply
                0
                • H Offline
                  H Offline
                  haythem
                  wrote on last edited by
                  #13

                  HI

                  1 Reply Last reply
                  0
                  • H Offline
                    H Offline
                    haythem
                    wrote on last edited by
                    #14
                    This post is deleted!
                    1 Reply Last reply
                    0
                    • H Offline
                      H Offline
                      hichem
                      wrote on last edited by VRonin
                      #15

                      I want to call a function from QT application in facet this function exist a CAPL script runing in Canalyzer I am using COM to get access to the function here my exemple but it doesnt work where is the problem any help plz

                      this my code:

                      ICAPL *pcapl;
                      
                      ICAPLFunction *fn ;
                       IApplication* pIApp;
                      
                      
                      HRESULT result,result1,result2, hresult,result3,result4,hr;
                       IDispatch*CaplDisp,*CaplFn;
                      WCHAR * szMember = L"Multiply";
                       DISPID dispid;
                        DISPPARAMS dispparams = {NULL, NULL, 0, 0};
                          EXCEPINFO excepinfo;
                            UINT nArgErr;
                         CLSID clsid;
                      
                      
                      
                       result = CLSIDFromProgID(L"CANalyzer.Application", &clsid);
                         const  IID IID_CAPL =__uuidof(ICAPL);
                      
                          const  IID IID_CAPLFUNCTION =__uuidof(ICAPLFunction);
                           const IID IID_IApplication =__uuidof(IApplication);
                      
                         result = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IApplication, (void**) &pIApp);
                      
                      
                         result1=pIApp->get_CAPL(&CaplDisp);
                      
                                     qDebug() << "Result_get_CAPL "<<result1 ;
                      
                      
                         result2=CaplDisp->QueryInterface(IID_CAPL,(void**)&pcapl);
                          qDebug() << "result2 "<<result2 ;
                      
                      
                        VARIANT varResult;
                      
                      
                        hr = CaplDisp->GetIDsOfNames(IID_CAPLFUNCTION, &szMember, 1, CLSCTX_LOCAL_SERVER, &dispid);
                          qDebug() << "hr"<<hr ;
                          if (SUCCEEDED(hr)) {
                      hr = CaplDisp->Invoke(1,IID_CAPL, CLSCTX_LOCAL_SERVER,DISPATCH_METHOD,&dispparams, &varResult, NULL, NULL);
                          }
                      
                      1 Reply Last reply
                      0
                      • L la-ga

                        Hello NicuPopescu,

                        I've found my mistake. Thank you for posting your code. You've helped me a lot!

                        A Offline
                        A Offline
                        Anis07
                        wrote on last edited by Anis07
                        #16

                        @la-ga
                        hi can you tell us what was the problem ?

                        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