【问题标题】:COM: how to specify a specific type of COM object as an argument in idlCOM:如何在 idl 中指定特定类型的 COM 对象作为参数
【发布时间】:2012-02-17 21:26:08
【问题描述】:

目前我有一些看起来像这样的代码

void calc_run(Calculation *c, Input *i);

STDMETHODIMP CCalculation::run(IUnknown* input)
{
    calc_run(calc,((CMyInputClass*)input)->get_input());  
    return S_OK;
}

换句话说,CCalculation::run 想要一个指向 CMyInputClass 的指针,但目前它需要 IUnknown 和向下转换。

大概这很糟糕。

但是我怎样才能更精确地向 COM 指定我想要的对象呢?我尝试更改.c、.h 和.idl 文件,但编译器无法将CMyInputClass* 识别为idl 中的类型规范。

interface ICalculation : IDispatch{
[id(2), helpstring("method run")] HRESULT run([in] CMyInputClass* input);

这样做的正确方法是什么?

【问题讨论】:

    标签: c++ com idl


    【解决方案1】:

    COM 方法是引入一个 COM 接口,CMyInputClass 将实现并在 run() 声明中使用该接口:

    interface ICalculationInput : IUnknown {
         //some methods here
    };
    
    interface ICalculation : IDispatch{
         [id(2), helpstring("method run")] HRESULT run([in] ICalculationInput* input);
    };
    

    【讨论】:

      猜你喜欢
      • 2016-06-26
      • 2016-12-22
      • 2011-04-10
      • 1970-01-01
      • 2013-10-14
      • 2011-10-27
      • 2012-07-25
      • 2016-01-04
      • 2010-11-28
      相关资源
      最近更新 更多