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

C++ COM:如何在idl中将特定类型的COM对象指定为参数,c++,com,idl,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和do

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

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
和downlasts

想必这很糟糕

但我如何才能更精确地向COM指定我想要的对象呢?我试图更改
.c
.h
.idl
文件,但编译器没有将
CMyInputClass*
识别为
idl
中的类型规范

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

正确的方法是什么?

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

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

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