2012-02-17 47 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); 
}; 
相關問題