COM连接点 - 最简单的例子 (1)

本文介绍了COM连接点的基本概念,将其比喻为C语言的回调函数,并通过一个简单的ATL COM DLL工程示例,演示了如何创建和使用连接点。在示例中,创建了IMyCar接口和连接点_IMyCarEvents,添加了OnStop方法。通过CProxy_IMyCarEvents类实现了连接点,并展示了客户端如何注册sink对象,接收并处理COM对象触发的事件。文中还讨论了sink对象的生命周期管理,指出一旦挂载到COM对象,其生命周期由COM对象负责,避免了内存泄漏问题。
摘要由CSDN通过智能技术生成

连接点,connection point,在COM里面也是挺重要的。简单讲,COM里面的连接点就好像是C语言的回调函数,只不过它是基于面向对象实现的。连接点的作用也就是COM对象将一些事件通知客户(调用者)。


先来做一个简单的连接点例子吧,之后再慢慢探讨。

用ATL创建一个工程(DLL COM),取名MyCom,

然后创建一个COM接口,IMyCar. 在options那里选上connection points。

然后在class view那里找到_IMyCarEvents(在MyComLib下面),右键点击Add Method.如图,增加一个方法OnStop。

增加完之后,可以看到IDL文件里面多了个方法,如下图:

library MyComLib
{
	importlib("stdole2.tlb");
	[
		uuid(2CF347A8-63ED-4CE0-8A6D-F98D60C98B8C)		
	]
	dispinterface _IMyCarEvents
	{
		properties:
		methods:
            
            [id(1)] HRESULT OnStop([in] FLOAT Distance);
    };
	[
		uuid(DA6770F3-CBB6-4F34-A137-2B02A27AB219)		
	]
	coclass MyCar
	{
		[default] interface IMyCar;
		[default, source] dispinterface _IMyCarEvents;
	};
};

之后在CMyCar上点击右键,选择Add Connection Point。

选择_IMyCarEvents,点击>按钮。然后Finish.

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Java 连接 WebSocket 客户端代码可以使用 Java 原生的 `java.net` 包进行开发。 以下是一个简单的 Java WebSocket 客户端示例: ``` import java.net.URI; import javax.websocket.ClientEndpoint; import javax.websocket.ContainerProvider; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.WebSocketContainer; @ClientEndpoint public class WebSocketClient { @OnOpen public void onOpen(Session session) { System.out.println("Connected to endpoint: " + session.getBasicRemote()); } @OnMessage public void onMessage(String message) { System.out.println("Received message: " + message); } public static void main(String[] args) { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); try { URI uri = new URI("ws://localhost:8080/path"); container.connectToServer(WebSocketClient.class, uri); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们使用了 Java 原生的 WebSocket 客户端实现,使用 `ContainerProvider.getWebSocketContainer()` 方法创建一个 WebSocket 容器,然后使用 `container.connectToServer(WebSocketClient.class, uri)` 方法连接到 WebSocket 服务器。 如果你想要使用第三方库,例如 Tyrus 和 JSR-356,你可以在以下代码中查看示例: ``` import java.net.URI; import javax.websocket.ClientEndpoint; import javax.websocket.CloseReason; import javax.websocket.ContainerProvider; import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.WebSocketContainer; @ClientEndpoint public class WebSocketClient { @OnOpen public void onOpen(Session session) { System.out.println("Connected to endpoint: " + session.getBasicRemote()); try { session.getBasicRemote().sendText("Hello World"); } catch (Exception e) { e
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值