COM:如何在 idl 中指定特定类型的 COM 对象作为参数
目前我有一些代码看起来像这样
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);
这样做的正确方法是什么?
Currently I have some code that looks like this
void calc_run(Calculation *c, Input *i);
STDMETHODIMP CCalculation::run(IUnknown* input)
{
calc_run(calc,((CMyInputClass*)input)->get_input());
return S_OK;
}
In other words CCalculation::run
wants a pointer to a CMyInputClass
, but currently it takes IUnknown
and downcasts.
Presumably this is bad.
But how can I specify more precisely to COM which object I want? I tried changing the .c
, .h
and .idl
files but the compiler doesn't recognise CMyInputClass*
as a type specification in the idl
.
interface ICalculation : IDispatch{
[id(2), helpstring("method run")] HRESULT run([in] CMyInputClass* input);
What is the correct way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
COM 方式是引入一个 COM 接口,
CMyInputClass
将在run()
声明中实现并使用该接口:The COM way would be to introduce a COM interface that
CMyInputClass
would implement and use that interface inrun()
declaration: