3

我有一个 ATL/COM 项目,在 VC++ 6 中。我想要一个现有的类,它以前从未被定义为引发事件,引发事件。为此,该类必须实现一个“连接点”。

这些事件属于以前没有任何类引发过的类型,因此我将不得不创建一个新的连接点,而不是重用现有的连接点。

我知道如何让一个类实现一个连接点——右键单击类视图中的类,选择“实现连接点”,然后从它显示的列表中选择适当的连接点。

我知道如何创建一个新的连接点,只要它与一个新的 ATL 类相关联来实现它 - 在创建类时检查“支持连接点”。

但是我不知道如何在创建实现它的新 ATL 类的情况下创建新连接点。

我修改了 IDL 以包含类似于现有连接点定义的内容:

[
    uuid(*blah blah blah*),
    helpstring("_IBlahEvents Interface")
]
dispinterface _IBlahEvents
{
    properties:
    methods:
    [id(1), helpstring("method BlahChanged")] HRESULT BlahChanged();
};

(显然我有一个真正的 uuid,而不是“ blah blah blah ”)。

完成此操作后,_IBlahEvents 界面将显示在类视图中。但是当我右键单击要实现 _IBlahEvents 的 ATL 类并选择“实现连接点”时,_IBlahEvents 不会显示在现有连接点列表中。

我已经重新编译,包括清理和重建所有内容。

我错过了什么?

谢谢。

4

2 回答 2

0

如果您手动修改了 IDL 文件 - 那么您也应该手动执行此步骤。也就是说 - 在 coclass 中添加以下内容:

[default, source] dispinterface _IBlahEvents; 
于 2009-08-01T22:22:39.747 回答
0

你有添加这个基类吗?

  public IConnectionPointContainerImpl<CYOUR_CLASS_HERE>

如果不是这样,请从头开始创建一个与该项目匹配的新项目,但选中“支持连接点”复选框。

确保使用相同的名称。然后,将其与原始项目进行比较,看看缺少什么。

于 2009-07-21T19:54:14.947 回答