Visual C#开发BHO IE插件入门

Posted by & filed under Uncategorized.

      微软在1997年正式推出Browser Helper Object (BHO), 使程序员能够更好的对IE进行二次开发和操作. 在通过编写BHO程序数月后, 我希望把我的一些经验告诉才开始的同志, 避免走一些弯路。 最近公司程序需要嵌入各个浏览器的插件。 首先需要支持的是IE的插件。又称为BHO(Browser Helper Object浏览器辅助对象).比起在C++中开发BHO,c#确实是更加简单,我的BHO主要为了实现通过点击浏览器有效下载链接,然后调用我们自己的程序(和迅雷差不多)BHO主体程序时UrlTrack类。而这个类我们需要从接口IObjectWithSite继承。 IObjectWithSite的源码比较简单  

  上述的GUID可以自己手动生成一个 另外主体程序UrlTrack类 Getsite

Setsite—按自己需求给webBrowser添加各种事件来监控IE的事件,并触发  

RegisterBHO—BHO加入到注册表的方法  

  UnregisterBHO— Read more […]

【转】组播协议原理讲解

Posted by & filed under Uncategorized.

单播、组播、广播是计算机网络上三种基本的通信方式。     单播是相互感兴趣的主机双方进行通信的方式,主机不能接收对其不感兴趣的其它主机发送的信息,属于点对点通信。     广播是主机向子网内所有主机发送信息,子网内所有主机都能收到来自某台主机的广播信息,属于点对所有点的通信。     组播则介于两者之间,是主机向一组主机发送信息,存在于某个组的所有主机都可以接收到信息,属于点对多点通信。 下边用张图表示这三种方式的数据传输: 这张图可以简单看出来这三种方式的传输方式,下边来具体细分下。 首先说下单播与组播的区别: 单播即点对点的方式进行数据传输,组播类似与一个qq群,大家上线了别人都知道,另外一个人发送消息,该群里的人都能收到(抛开隐身、离线消息)。这里只是举例子,具体实现不是这样的,这里只是让大家更容易理解一些。下边看图理解: 图中如果要用单播实现多个发送则需要同时发送三条消息,而组播只需发送一条就可以完成了,所以说组播比较节省带宽。 接下来再说下组播与广播的区别吧: 组播跟广播类似,广播可以认为是组范围最大化的组播,广播是发送给所有人,而组播是发送给一个组中的人。当然,二者还是存在显著区别的:首先,广播被限制在子网内, 不会被路由器转发。其次,主机被默认为是接收者,组播方式则需要主机主动加入。另外广播的方式容易造成网络阻塞,几年前的广播风暴相信大家到现在都没有忘记。这里没找着合适的图,大家慢慢理解吧。 组播及广播由什么设备进行转发的? 组播及广播是由交换机进行转发的,如果是没有组播功能的交换机,则组播将会视为广播发送。路由器为具有路由功能的交换机,比交换机功能更强大些,所有说路由同样支持组播方式。现在的交换机都具备组播转发的功能,所以不用担心组播方式设备不支持的情况。下边上张组播交换机转发原理图: Read more […]

【转】C#非托管内存操作结构体拷贝

Posted by & filed under Uncategorized.

      结构体的转换其实和基础类型数组转换差不多,只是结构体不能通过Marshal.Copy的方式直接转换到内存。 结构体痛byte数组的互转直接用于网络通信中还是非常方便的。 1、定义结构体 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /// <summary>    /// 测试结构体的Copy    /// </summary>    public struct TestStruct    {        public string Number;        public int[] IntMember;        public byte ByteMember;        public short ShortMember;        public override  string ToString()        {            return string.Format(“Number:” + Number + ” ByteMember:” + ByteMember + ” ShortMember:” + ShortMember Read more […]

【转】C#非托管内存拷贝转换数据

Posted by & filed under Uncategorized.

1、简介  C#专门提供了非托管内存操作的功能类System.Runtime.InteropServices.Marshal。做过C/C++互操作的朋友应该对这个类有所了解吧!   非托管内存使用的好处是方便,能够快速操作内存,在一些类型数据转换的时候能够减少运算量,提升运算速度;缺点就是会花费更多的内存,而且操作非托管内存很容易引起内存泄漏,所以使用的时候需要万分小心,在给程序员带来方便的同时,也会挖下一些隐藏的坑!  2、利用非托管内存转换基本类型数组 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /// <summary> /// short数组转换成byte数组 /// </summary> /// <param name=”source”></param> /// Read more […]

关于C#多继承

Posted by & filed under Uncategorized.

       近日看到了一个贴子,就是在C#语言中,如何实现多继承的问题。相信涉猎c#不多的人(像我这样的菜鸟),一看就觉得很可笑,c#肯定是不能实现多继承的啊。都知道在c++中因为实现多继承会有很多的歧义问题,所以在c#中就把多继承给取消了,而用接口来实现!但是想想,如果是初学者肯定不会不会问这样的问题。肯定是个高手,然后就开始上网查资料!然后发现真的可以实现!        说起多继承,首先大家可以想想这个问题:你知道在C#中怎么实现多继承吗?        主流的答案无非2种。        答案一:用接口啊,一个类可以继承自多个接口的。        答案二:C#不支持多继承,C++才支持多继承,多继承会让代码变得很乱,因此微软在设计C#的时候放弃了多继承。   Read more […]

C#知识 泛型

Posted by & filed under Uncategorized.

        泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险,避免进行强制类型转换的需求提高类型安全性。 泛型概述及优点         泛型类和泛型方法同时具备可重用性、类型安全和效率高等特点。它通常用在集合和在集合上运行的方法中。.NET 2.0版类库提供了一个新的名为System.Collections.Generic的命名空间,其中包含几个新的基于泛型的集合类。   Read more […]

【转】在动态网络下实现分布式共享存储

Posted by & filed under Uncategorized.

        共享内存系统是普通单机程序开发人员熟悉的开发范式,通过简单的使用读、写命令,就能确保将我们需要的值从内存中放入和读取出来,数据的一致性等问题,在单机系统中,开发人员根本不需要考虑,比如你不需要考虑当你进行了i=i+1后,再获取i的值时,i的值可能还没有来的及变化,因为这些都已经在读写原语的原子性中被考虑了,然而在分布式环境下,由于数据出现多个副本,且副本的数量有可能动态增加和减少,要实现同样的功能,又能保证读写性能,就需要新的算法和实现。本文介绍了分布式环境下实现共享内存模型会遇到的各种问题和挑战,针对不同问题,介绍多种算法,并比较其优劣性。最终选取两种实现进行实际测评。本文是对现阶段该领域研究现状的总体介绍,通过阅读该文,我们能够了解动态分布式共享内存研究的前沿状况,了解该领域中的挑战与机遇,是有志于分布式领域的架构人员,开发人员,研究人员的必读资料。 要点透视   动态共享存储(DSM)系统支持通过读,写操作存取对象,同时需要在底层分布系统的各种不确定性干扰的条件下,保证数据一致性与可用性 开发人员能够使用DSM来实现基于共享内存范式的分布式系统,并将他们的工作重点放在系统功能上,不用过分操心底层的信息设置,异步操作以及失败机制。 动态共享存储系统实现了对象副本集合的透明化、运行时重配置,并支持多种副本模式的实现,包含从基于存储网络节点的实现,以及类似ad Read more […]

eMule v0.49编译

Posted by & filed under Uncategorized.

备注:由于需要学习eMule,编译时有很多问题,所以查找了一些资料,下面的文章提供的方法可用。编译环境Visual studio 2010,编译版本为官方eMule v0.49版本,非国内VeryCD版本。 一:下载源代码和支持库 1.下载eMule v0.49 源代码 http://prdownloads.sourceforge.net/emule/eMule0.49c-Sources.zip 2.Crypto v5.1 http://www.cryptopp.com/crypto51.zip 3.zlib v1.2.3 http://www.zlib.net/zlib-1.2.3.tar.gz 4.ResizableLib 1.3 — A set of MFC classes to easily make resizable windows http://sourceforge.net/projects/resizablelib/files/ResizableLib/1.3/ResizableLib_1_3.zip/download 5.libpng-1.2.40 http://prdownloads.sourceforge.net/libpng/libpng-1.2.40.tar.gz?download   二:编译前整理工作 解压eMule0.49c-Sources.zip到目录:eMule0.49c-Sources 可以看到eMule主工程目录在srchybrid文件夹, 另外该文件夹下已经携带了三个第三方库:EditBinX, Read more […]

【转】C#对象的浅拷贝,深拷贝

Posted by & filed under Uncategorized.

  做对象拷贝的时候,使用一个对象为新对象赋值,new了新对象,结果发现两个对象公用一个源,怒查资料。   C#中有两种类型变量,一种 是值类型变量,一种是引用类型变量,对于值类型变量,深拷贝和前拷贝都是通过赋值操作符号(=)实现,其效果一致,将对象中的值类型的字段拷贝到新的对象中.这个很容易理解。 本文重点讨论引用类型变量的拷贝机制和实现。   C#中引用类型对象的copy操作有两种:   浅拷贝(影子克隆/shallow copy):只复制对象的值类型字段,对象的引用类型,仍属于原来的引用. 深拷贝(深度克隆):不仅复制对象的值类型字段,同时也复制原对象中的对象.就是说完全是新对象产生的.   浅拷贝和深拷贝之间的区别:浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。   注意:string类型有点特殊,对于浅拷贝,类值类型对象进行处理。   浅拷贝的实现   使用Object类MemberwiseClone实现   MemberwiseClone:创建当前 Read more […]

TCP状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题

Posted by & filed under Uncategorized.

TCP状态迁移 大家对netstat -a命令很熟悉,但是,你有没有注意到STATE一栏呢,基本上显示着established,time_wait,close_wait等,这些到底是 什么意思呢,在这篇文章,我将会详细的阐述。 大家很明白TCP初始化连接三次握手吧:发SYN包,然后返回SYN/ACK包,再发ACK包,连接正式建立。但是这里有点出入,当请求者收到SYS /ACK包后,就开始建立连接了,而被请求者第三次握手结束后才建立连接。但是大家明白关闭连接的工作原理吗?关闭连接要四次握手:发FIN包,ACK 包,FIN包,ACK包,四次握手!!为什么呢,因为TCP连接是全双工,我关了你的连接,并不等于你关了我的连接。 客户端TCP状态迁移: CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED 服务器TCP状态迁移: CLOSED->LISTEN->SYN收到 Read more […]