Create COM object in Qt

夙愿已清 提交于 2019-12-08 05:13:51

问题


I try to create a COM object and get the interface from the object in Qt. So Qt works as the COM client. In my example the COM server is the CANoe COM server.

Here is my source code of the Qt pro file and my interface.cpp file where I try to establish the connection to CANoe:

pro file:

# Add more folders to ship with the application, here
folder_01.source = qml/3com_interface
folder_01.target = qml
DEPLOYMENTFOLDERS = folder_01

# Additional import path used to resolve QML modules in Creator's code model
QML_IMPORT_PATH =

# If your application uses the Qt Mobility libraries, uncomment the following
# lines and add the respective components to the MOBILITY variable.
# CONFIG += mobility
# MOBILITY +=

# The .cpp file which was generated for your project. Feel free to hack it.
SOURCES += main.cpp \
    interface.cpp

# Installation path
# target.path =

# Please do not modify the following two lines. Required for deployment.
include(qtquick2applicationviewer/qtquick2applicationviewer.pri)
qtcAddDeployment()

HEADERS += \
    CANoe.h \
    interface.h

CONFIG += qaxcontainer

interface.cpp

#include "interface.h"
#include <QDebug>
#include "objbase.h"
#include "CANoe.h"

#include "windows.h"
#include "winnls.h"
#include "shobjidl.h"
#include "objidl.h"
#include "shlguid.h"

#include "strsafe.h"


Interface::Interface(QObject *parent) :
    QObject(parent)
{
}

void Interface::trigger_slot(const QString &msg)
{


    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";
    }

}

When I try to build the program I get the following error code: undefined reference to '_GUID const&_mingw_uuidof()'

Does someone have an idea how to create the COM interface between Qt and a COM Server? I've searched for hours in the Internet but doesn't find any explanations. Only for accessing a COM Server with Visual Studio by using ATL. But I can't use ATL in Qt.


回答1:


__uuid is a convenience to obtain an GUID for a COM class, but any other method will work too. Other than that, your code should work.

The error message looks like a MinGW link error (not enough info in question to be sure), suggesting that you missed a MinGW COM library.



来源:https://stackoverflow.com/questions/20516153/create-com-object-in-qt

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!