Здравствуйте.
Создаю COM сервер с помощью
ActiveQt. Использую уже готовый шаблон из
VisualStudio с классом, унаследованным от
QAxBindable:
ActiveQtServer1.hclass ActiveQtServer1 : public QWidget, public QAxBindable
{
Q_OBJECT
public:
ActiveQtServer1(QWidget* parent = Q_NULLPTR);
private:
Ui::ActiveQtServer1Class ui;
};
ActiveQtServer1.cppActiveQtServer1::ActiveQtServer1(QWidget* parent)
: QWidget(parent)
{
ui.setupUi(this);
}
QAxAggregated* ActiveQtServer1::createAggregate()
{
return new AxImpl();
}
long ActiveQtServer1::test() const
{
return 1;
}
QAXFACTORY_DEFAULT(ActiveQtServer1,
"{b44c80a9-52ee-4641-a4bf-b4aedffdbe92}",
"{00c929e6-7c4f-4f89-b624-f59da2741b9a}",
"{e5a3af26-07d4-4140-a499-fd3d6830e008}",
"{f8e662c5-11db-463d-8f7d-53b3eb95a979}",
"{e7cf5162-7f1f-4fe6-a743-0c29a372c721}"
)
Нужно, чтобы класс
ActiveQtServer1 реализовывал уже существующий в системе интерфейс (от другой программы). Пусть он называется
IMyServer. В документации нашел класс
QAxAggregated. Наследовал его:
#define IID_IMyServer "{23F2A7A2-9C3D-11D1-B5D0-0000E84F2904}"
interface IMyServer : public IUnknown
{
Q_CLASSINFO("InterfaceID", IID_IMyServer);
Q_PROPERTY(long test READ test)
public:
long test();
};
class AxImpl : public QAxAggregated, public IMyServer
{
public:
AxImpl() {};
long queryInterface(const QUuid& iid, void** iface);
long test();
QAXAGG_IUNKNOWN
};
long AxImpl::queryInterface(const QUuid& iid, void** iface)
{
*iface = 0;
if (iid == IID_IMyServer)
*iface = (IMyServer*)this;
else
return E_NOINTERFACE;
AddRef();
return S_OK;
}
long AxImpl::test()
{
return S_OK;
}
И добавил в класс
ActiveQtServer1 метод
createAggregate:
QAxAggregated* ActiveQtServer1::createAggregate()
{
return new AxImpl();
}
Проект собрался, все ОК. Но интерфейс
IMyServer не был реализован. В файле
.idl его нет:
[
aggregatable,
helpstring("ActiveQtServer1 Class"),
uuid(B44C80A9-52EE-4641-A4BF-B4AEDFFDBE92),
control
]
coclass ActiveQtServer1
{
[default] dispinterface IActiveQtServer1;
[default, source] dispinterface IActiveQtServer1Events;
};
Подскажите, пожалуйста, как реализовать интерфейс
IMyServer в классе
ActiveQtServer1 средствами
Qt?
Спасибо.