2012-02-17 57 views
0

目前,我有一些代码,看起来像这样COM:如何指定特定类型的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); 

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

回答

2

的COM方法是引入CMyInputClass会实现,并使用该接口run()声明COM接口:

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

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