COM:如何在idl中将特定类型的COM对象指定为参数

时间:2012-02-17 13:21:32

标签: c++ com idl

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

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);

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

1 个答案:

答案 0 :(得分:2)

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

interface ICalculationInput : IUnknown {
     //some methods here
};

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