gpt4 book ai didi

events - Visual C++ 中的简单回调

转载 作者:行者123 更新时间:2023-12-01 05:42:47 25 4
gpt4 key购买 nike

我是一名 Linux 程序员,并且是 COM 编程的新手,我继承了一个我现在正在尝试修改的程序。我有一个带有以下调度接口(interface)的 IDL 文件,我正在尝试在 C++ 中设置回调。我一直在网上搜索,我发现了一些带有连接点的东西,但我没有看到一个可以遵循的简单示例,所以我想知道有人可以帮助我。

调度接口(interface):

[
helpstring("Event interface"),
helpcontext(0x00000006)
]
dispinterface _DEvents {
properties:
methods:
[id(0x00000001), helpstring("Occurs when about to begin."), helpcontext(0x0000000d)]
void Starting();
[id(0x00000002), helpstring("Occurs at the beginning."), helpcontext(0x00000011)]
void Begin();
[id(0x00000003), helpstring("Occurs at the end."), helpcontext(0x00000012)]
void End();
};

同类:
[
helpstring("C Class"),
helpcontext(0x0000009e)
]
coclass C {
[default] interface IE;
[default, source] dispinterface _DEvents;
};

水槽接口(interface):
[
odl
]
interface INotifySink : IUnknown {
HRESULT _stdcall Starting();
HRESULT _stdcall Begin();
HRESULT _stdcall End();
};

我找到了这两篇文章,但我无法对它们做出正面或反面:
  • http://www.codeproject.com/KB/COM/TEventHandler.aspx
  • http://www.codeproject.com/KB/COM/com_in_c5.aspx

  • 我想我必须创建一个扩展 INotifySink 并实现功能的新类,但那之后我该怎么办?

    谢谢,
    杰恩

    附言如果我需要提供更多信息,请告诉我,我将编辑此问题。谢谢。

    最佳答案

    您是在问如何使用现存的 coclass 的事件吗?为此,您需要创建一个实现 _DEvents 的对象。界面,不是新界面。

    就像是:

     class EventSink : public _DEvents
    {
    AddRef() { ... }
    Release() { ... }
    QueryInterface(...) { ... }
    Starting() { printf("Starting happend\n"); }
    Begin() { ... }
    End() { ... }
    }
    EventSink *es = new EventSink;
    IE *objectOfInterest = ...;
    IConnectionPointContainer *cpc;
    objectOfInterest->QueryInterface(&cpc);
    IConnectionPoint *cp;
    cpc->FindConnectionPoint(__uuidof(_DEvents), &cp);
    cp->Advise(es, &cookie);
    objectOfInterest->somethingthatfiresanevent();

    那有意义吗?

    关于events - Visual C++ 中的简单回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4309395/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com