AciveX接口事件的手动实现
为了理解ActiveX事件的运作原理,特意做了如下实验
初试化过程:
try
{
CLSID clsid;
HRESULT hr=::CLSIDFromProgID(L"MSWinsock.Winsock",&clsid);
if(FAILED(hr))
throw "获得对象的CLSID失败";
hr=::CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(IMSWinsockControl),(void**)&pMSWinsockControl);
if(FAILED(hr))
throw "创建对象失败...";
hr=pMSWinsockControl->put_Protocol(sckUDPProtocol);
if(FAILED(hr))
throw "设置协议类型失败..."; IConnectionPoint *cp=NULL;
SinkDMSWinsockControlEvents * TheEventSink=NULL;
IConnectionPointContainer *cps=NULL;
hr=pMSWinsockControl->QueryInterface(IID_IConnectionPointContainer,(void**)&cps);
if(FAILED(hr))
throw "查询事件容器失败...";
hr=cps->FindConnectionPoint(__uuidof(DMSWinsockControlEvents),&cp);
if(FAILED(hr))
throw "查找连接点失败...";
cps->Release();
hr=cp->Advise(&TheEventSink,&ConnectPointCookie);
if(FAILED(hr))
throw "连接连接点失败...";
cp->Release();
}
catch(char* msg)
{
MessageBox(CString(msg));
return S_FALSE;
}
return S_OK;
}
事件的实现类:
class SinkDMSWinsockControlEvents : public IDispatch
{
。。。。。。
//DISPID是一个长整数,它标识的是一个函数。对于IDispatch的某一个特定的实现,DISPID都是唯一的。IDispatch的每一个实现都有其自己的IID,这里dispidMemeber实际上是可以认为是和IE实例所发生的每一个事件相关的方法,比如:DISPID_BEFORENAVIGATE2,DISPID_NAVIGATECOMPLETE2
STDMETHODIMP Invoke(
DISPID dispID,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS * pdispparams,
VARIANT * pvarResult,
EXCEPINFO * pexcepinfo,
UINT * puArgErr)
{
int i;
switch(dispID)
{
case :
OnDataArrive(pdispparams->rgvarg->intVal);
break;
default: break;
}
return S_OK;
}
void SinkDMSWinsockControlEvents::OnDataArrive(long bytesTotal)
{
VARIANT vtData;
vtData.vt=VT_BSTR;
vtData.bstrVal=CString("").AllocSysString();
pMSWinsockControl->GetData(&vtData);
CString str(vtData.bstrVal);
pCommunucationCtrl->m_CurrentCommand=vtData.bstrVal;
pCommunucationCtrl->Fire_OnCommandComming(vtData.bstrVal);
}
}
看起来复杂的东西就是这样
AciveX接口事件的手动实现的更多相关文章
- yapi 事件创建、修改等接口事件监听
使用的yapi作为接口文档平台.出于业务需求需要对接口创建.修改.删除等事件进行监听. yapi已经实现并预留了这个口子,但是没有找到实现的文档.这里进行简单描述下使用的方式. 一.yapi创建.修改 ...
- API中FileReader 接口事件
FileReader 接口包含了一套完整的事件模型,用于捕获读取文件时的状态onabort 中断onerror 出错onloadstart 开始onprogress ...
- 微信公众平台设置URL和Token接收接口事件推送
最近做对接微信闪开发票-微信发票名片,里面有个接收用户提交抬头接口是微信推送事件到公众号后台,该事件将发送至开发者填写的URL(登录公众平台进入[开发者中心设置]). 开发者可通过事件推送完成数据统计 ...
- unity中 UGUI的按下、拖动接口事件的实现
using UnityEngine; using System.Collections.Generic; using DG.Tweening; using UnityEngine.EventSyste ...
- 了解IHttpModule接口事件执行顺便 获取Session
本文转载自:http://www.cnblogs.com/eflylab/archive/2008/05/29/1209767.html 最近公司一个项目让人SQL注入了-为了临时先解决这个问题,使攻 ...
- Java 基础 enum枚举类 的创建/使用/接口继承 ,以及手动创建枚举类的对象为:public static final
笔记: import java.lang.*; /**一:枚举类 : enum Season implements info { s1(),s2(),s3(),s4() }; //s1--s4 放在S ...
- 解决input 有多少个radio绑定change事件,手动触发就会执行多少次问题
如题,相信大家都会遇到这个问题,那么为什么会触发多次呢?其实当你用jquery绑定onchange事件的时候你就无形中给每个radio绑定了事件,所以才会出现执行多少次的问题了,那么如何解决呢,其实这 ...
- IHttpModule接口事件执行 获取Session 找了很多国内的都不对,从国外转过来一个测试可用的
我的环境,asp.net4.0框架集 不多说上代码 public class MyHttpModule : IHttpModule { public void Init(HttpApplication ...
- C#:实现接口中定义的事件
public delegate void TestDelegate(); // delegate declaration public interface ITestInterface { event ...
随机推荐
- hashlib模块--加密
用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import hashlib m = ha ...
- C语言基本类型的字节数
- lable标签的妙用
最近在设计网页时,只要一加入表单或表单对象,文本框等等,就会在代码中加入一个<label></label>,一直没明白这个label是做什么的,今天正好看到了解释: Label ...
- extjs 省市县级联
Ext.define('State', { extend: 'Ext.data.Model', fields: [ {type: 'string', name: 'nevalue'}, {type: ...
- Java 8 Stream 用法
一.Stream是什么 Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator.原始版本的 Iterator,用户只能显式地一个一个遍历元 ...
- LightOJ 1032 - Fast Bit Calculations 数位DP
http://www.lightoj.com/volume_showproblem.php?problem=1032 题意:问1~N二进制下连续两个1的个数 思路:数位DP,dp[i][j][k]代表 ...
- 开源中国愚人节网页变模糊的js blur代码
<![if !IE]> <script> /* * by moli */ $(document).ready(function(){ if(document.cookie.in ...
- 数据库-Core Data
技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong 数据库-Core Data 技术博客htt ...
- js 给指定ID赋值
js 给指定ID赋值 <script language="javascript" type="text/javascript"> document. ...
- Tornado/Python 学习笔记(一)
1.源代码下载及安装:http://www.tornadoweb.org/en/stable/ 2.python中xmlrpc库官方文档:https://docs.python.org/3/libra ...