【问题标题】:How to call interface API from within COM server如何从 COM 服务器中调用接口 API
【发布时间】:2010-07-14 15:13:46
【问题描述】:

我有一个 com 服务器,其中一些接口暴露了一些 API

COM 类如下所示

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

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

现在这个 com 服务器还包含一个类 XYZ

ABC API 需要调用 XYZ 功能

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

dosomething函数需要调用com server的Task函数,如下图

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

如何做到这一点?我需要在 dosomething 中 CoCreateInstance ITask 吗?

我尝试创建 CTask 任务;在做某事,但它给出了一些错误。

【问题讨论】:

  • “给出了一些错误”并不能帮助我们帮助您。
  • 无法创建抽象类 CTask 的实例。方法 QueryInterface、AddRef、Release 未实现

标签: visual-c++ com atl


【解决方案1】:

CTask 是不可创建的,因为它没有实现IUnknown 方法。您需要使用用于充当 COM 对象的 ATL 类之一,例如 CComObject

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2011-03-25
    • 2012-01-06
    • 2014-02-19
    • 2012-10-19
    • 1970-01-01
    • 2011-06-23
    相关资源
    最近更新 更多