Я пытаюсь создать COM-объект и получить интерфейс от объекта в Qt. Так что Qt работает как COM-клиент. В моем примере COM-сервер — это CANoe COM-сервер.
Вот мой исходный код файла Qt pro и мой файл interface.cpp, где я пытаюсь установить соединение с CANoe:
Про файл:
# 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";
}
}
Когда я пытаюсь собрать программу, я получаю следующий код ошибки:
неопределенная ссылка на ‘_GUID const&_mingw_uuidof ()»
У кого-нибудь есть идея, как создать COM-интерфейс между Qt и COM-сервером? Я часами искал в интернете, но не нашел объяснений. Только для доступа к COM-серверу с помощью Visual Studio с помощью ATL. Но я не могу использовать ATL в Qt.
__uuid
Удобно получить GUID для класса COM, но любой другой метод тоже будет работать. Кроме этого, ваш код должен работать.
Сообщение об ошибке выглядит как ошибка ссылки MinGW (недостаточно информации, чтобы быть уверенным), что указывает на то, что вы пропустили библиотеку MinGW COM.
Других решений пока нет …