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

COM: how to specify a specific type of COM object as an argument in idl

本文关键字:COM 类型 对象 参数 idl      更新时间:2023-10-16

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

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

正确的方法是什么?

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

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