目前我有一些看起来像这样的代码
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);
这样做的正确方法是什么?
答案 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);
};