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

发布于 2025-01-06 18:33:00 字数 656 浏览 0 评论 0原文

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

丑丑阿 2025-01-13 18:33:00

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

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

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

The COM way would be to introduce a COM interface that CMyInputClass would implement and use that interface in run() declaration:

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

interface ICalculation : IDispatch{
     [id(2), helpstring("method run")] HRESULT run([in] ICalculationInput* input);
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文