在 COM 中,连接点用于处理与事件相关的连接和断开。连接点通常用于事件源与事件接收者之间的通信。GetConnections 方法通常用于获取当前连接到连接点的事件接收者的信息。

以下是一个简单的示例代码,演示了使用 CConnectionPoint 的一般流程,尽管并不涉及 GetConnections 方法:
// 示例代码,仅用于演示基本流程

#include "stdafx.h"
#include "YourApp.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

class CYourEventSink : public CCmdTarget
{
    DECLARE_DYNAMIC(CYourEventSink)

public:
    // 处理事件的成员函数
    afx_msg void OnEvent();

    DECLARE_MESSAGE_MAP()
};

IMPLEMENT_DYNAMIC(CYourEventSink, CCmdTarget)

BEGIN_MESSAGE_MAP(CYourEventSink, CCmdTarget)
    ON_EVENT(CYourEventSink, /*事件源的CLSID*/, /*事件ID*/, OnEvent)
END_MESSAGE_MAP()

// CYourEventSink 成员函数的实现
void CYourEventSink::OnEvent()
{
    // 处理事件的逻辑
    // TODO: 添加你的事件处理代码
}

// CYourAppApp

BEGIN_MESSAGE_MAP(CYourAppApp, CWinApp)
    ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()

CYourAppApp::CYourAppApp()
{
    // TODO: 在此处添加构造代码,
    // 将所有重要的初始化放置在 InitInstance 中
}

// 唯一的 CYourAppApp 对象

CYourAppApp theApp;

// CYourAppApp 初始化

BOOL CYourAppApp::InitInstance()
{
    // 标准初始化
    // 如果一个控件不支持此功能,则返回 FALSE
    AfxEnableControlContainer();

    // 创建事件源对象
    CComObject<CYourEventSource>* pEventSource = nullptr;
    HRESULT hr = CComObject<CYourEventSource>::CreateInstance(&pEventSource);

    if (SUCCEEDED(hr) && pEventSource != nullptr)
    {
        // 创建事件接收者对象
        CYourEventSink* pEventSink = new CYourEventSink;

        // 获取连接点
        CConnectionPoint* pConnectionPoint = new CConnectionPoint(pEventSource, /*IID_IYourEventSink*/, /*Connection Point ID*/);

        // 将事件接收者连接到连接点
        pConnectionPoint->Advise(pEventSink, &dwCookie);

        // 触发事件,将调用事件接收者的处理函数
        pEventSource->FireEvent();

        // 断开连接
        pConnectionPoint->Unadvise(dwCookie);

        // 释放资源
        delete pConnectionPoint;
        delete pEventSink;
    }

    return TRUE;
}

请注意,上述代码中的 CConnectionPoint 和 GetConnections 方法是一种简化的表示,并非真实的 MFC API。在实际使用中,你需要查阅相关的 MFC 和 COM 文档以获取准确的信息,并根据你的具体需求进行实现。


转载请注明出处:http://www.zyzy.cn/article/detail/16047/MFC/CConnectionPoint