更新:2007 年 11 月
DispSink 属性示例说明单身服务器对象(只能有一个实例的对象),该对象有自己的双重接口和用于引发事件的调度接口。
DispSink 示例为此示例的非属性化版本。
| .gif) 说明: | 
|---|
| 其中某些示例(如此示例)尚未经过修改以反映 Visual C++ 向导、库和编译器中所做的更改,但仍演示了如何完成所需的任务。 | 
| .gif) 安全说明: | 
|---|
| 提供该示例代码是为了阐释一个概念,并不代表着最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,Microsoft 不承担任何责任。 | 
获取示例和安装示例的说明:
- 在 Visual Studio 的“帮助”菜单上,单击“示例”。 - 有关更多信息,请参见定位示例文件。 
- 示例的最新版本和完整列表可以从 Visual Studio 2008 Samples page(Visual Studio 2008 示例页面)联机获取。 
- 还可以在计算机的硬盘上查找示例。默认情况下,将示例和自述文件复制到 \Program Files\Visual Studio 9.0\Samples\ 下的文件夹中。对于 Visual Studio 速成版,所有示例都位于联机位置。 
生成并运行示例
生成并运行此示例
- 打开解决方案文件 DispSink.sln。 
- 在“生成”菜单中,单击“生成解决方案”。 
- 打开 ActiveX 控件测试容器的两个或更多实例并将客户端控件 DispCtl 插入每一实例中。有关如何访问测试容器的信息,请参见用测试容器测试属性和事件。 
- 在所有控件上调用 Connect 方法。 
- 在其中一个控件上调用 Send 方法。将“调用方法”对话框的“参数类型”字段更改为 VT_BSTR,然后在“参数值”框中键入任意字符串。单击 Invoke 按钮。该字符串将显示在所有连接控件的中央。 
- 在删除所有控件之前,对其调用 Disconnect 方法。 
示例的工作机制
服务器是一个单一实例对象,它具有自己的双重接口和一个用于引发事件的调度接口。使用 dispinterface 属性将调度接口放置在 .idl 文件中。服务器对象通过其双重接口 Send 方法接收数据,并通过其调度接口上的 Transfer 事件将数据传输到所有的连接组件。Dispserver 使用 event_source 属性,而 Dispclient 使用 event_receiver 属性。
客户端是一个包含一个服务器对象的 ActiveX 控件。该控件响应该服务器对象激发的 Transfer 事件。它有一个具有 Connect、Send 和 Disconnect 方法的双重接口。如果 Transfer 事件是用包含 BSTR 的变量激发的,则字符串显示在控件的中心位置。
属性
此示例使用下面的属性:
- DISPSINK/DispClient coclass、dual、event_receiver、helpstring、id、module、object、pointer_default、registration_script、threading、uuid、version、vi_progid 
- DISPSINK/DispServer coclass、default、dispinterface、dual、event_source、helpstring、id、module、object、pointer_default、threading、uuid、vi_progid 
关键字
此示例使用以下关键字:
#import、CComAutoThreadModule、CComSimpleThreadAllocator、CoCreateInstance、DECLARE_CLASSFACTORY_AUTO_THREAD、FireViewChange