Как вызвать интерфейс API изнутри COM-сервера - PullRequest
0 голосов
/ 24 мая 2010

У меня есть один com-сервер с некоторыми интерфейсами, выставляющими некоторые API

Класс COM выглядит следующим образом

class ATL_NO_VTABLE CTask :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CTask, &CLSID_Task>,
    public ITask
{

public:
 STDMETHOD (Task)();
 STDMETHOD (ABC)();
...
}

Теперь этот ком-сервер также содержит еще один класс XYZ

API ABC необходимо вызвать функциональность XYZ

 STDMETHODIMP ABC()
{
    XYZ xyz;
    xyz.dosomething();
}

функция dosomething должна вызывать функцию Task сервера com, как показано ниже

  class XYZ
       {
      public:
        void dosomething()
         {
        // need to call Task function
         }
        };

Как это можно сделать? Нужно ли создавать CoCreateInstance ITask для чего-либо?

Я попытался создать задачу CTask; в чем-то, но это дало некоторые ошибки.

1 Ответ

0 голосов
/ 14 июля 2010

Класс CTask невозможно создать, поскольку он не реализует IUnknown методы. Вам необходимо использовать один из ATL классов, предназначенных для использования в качестве COM-объектов, например CComObject:

CComPtr<ITask> newTask = new CComObject<CTask>();
...