2006年03月
ATL的智能指针是我不得不赞扬的一个东西。如果你到目前为止还没用使用过智能指针的话,那么就赶快终结这个时代吧!我的意思是,终止对AddRef 和 Release的一切操心。不管你的函数有多少退出路径,智能指针都能保证所有的引用计数正确无误。免得你殚精竭虑,费尽心思和功夫来查找引用计数的bugs。阅读全文>
发表于 @ 2006年03月29日 13:42:00|评论(loading...)|收藏
到现在为止,我们的讨论没有涉及到一个重要的细节,那就是对象的创建。因为相对与设计和实现来说,它比较简单。前四个部分所讨论的类工厂和注册相当广义。其中描述了BandObj如何利用资源脚本文件中所列的DLL的条目以及使用ATL注册器的类厂来注册COM对象。到了COMToys,我仅仅是将代码从BandObj移到了COMToys。 COMToys使用CTModule,CTFactory,和一个特殊的文件DllEntry.cpp来处理对象的创建,注册和DLL条目。CTModule是一个典型的“模块类”,就像MFC的CWinApp或者ATL的CComModule。其中的OnGetClassObject,OnDllRegisterServer等虚函数是可以重载的。不过必须包含(#include)实现DLL入口的DllEntry.cpp。 阅读全文>
发表于 @ 2006年03月29日 13:41:00|评论(loading...)|收藏
到目前为止,我介绍了一种用多继承代替嵌套类在MFC中实现COM对象的方法。基本思路是忽略MFC宏和接口映射,并调用GetInterfaceHook来返回接口指针。很明显,这已经使编程容易了许多,但可复用性体现在哪呢?开发COMToys的主要目的是让它具备可复用性特点来实现普通的COM接口。为此,COMToys使用了混合类。阅读全文>
发表于 @ 2006年03月29日 13:40:00|评论(loading...)|收藏
由于MFC树形对象模型而带来的负担,并不意味COMToys也必须有这个负担。COMToys使用多继承进行COM编程。为了清楚的说明它的工作原理,让我们看看建立在COMToys中CBandObj的新版本。对于应用层的程序像MyBands来说——CBandObj与其前身没什么两样。不同的只是现在CBandObj派生于多个父类CWnd 和IDeskBand。 阅读全文>
发表于 @ 2006年03月29日 13:39:00|评论(loading...)|收藏
可重用类就像小巧的 COM 积木一样,人们可以在不同场合以不同方式装配这些 COM 来创建更加精致的对象。但是如何创建这些 COM 呢?本文使用 MyBands 和 BandObj框架作为实验平台开发了一个可重用库:它就是 COMToys......。COMToys提供了一种用C++编写COM的方法或途径,这些方法和途径适用于任何类型的COM对象,不论你是使用MFC。还是其它的什么东西。COMToys是一种态度——它告诉人们用C++编写COM组件并不难,情况也确实是这样!阅读全文>
发表于 @ 2006年03月29日 13:36:00|评论(loading...)|收藏
前面所描述的是一些Band对象的基本操作和处理,这些基本操作理论上都是按照你设计好的思路实现了所要的功能。但在实际的编程过程中,并不是每一件事情都按照它应该的方式进行。下面将告诉你有关Band对象使用中可能遇到的问题。阅读全文>
发表于 @ 2006年03月29日 13:36:00|评论(loading...)|收藏
前面两个部分讨论了 MyBands 对象的创建和注册,现在MyBands已经注册妥当并且也具备了类工厂来创建它们,是揭穿Band对象真正面目的时候了。阅读全文>
发表于 @ 2006年03月29日 13:34:00|评论(loading...)|收藏
阅读了第一部分内容以后,现在你应该有点明白如何用BandObj来编写band对象了(定义一个GUID,然后调用AddBandClass),下面我们进一步深入BandObj,揭示其工作原理。阅读全文>
发表于 @ 2006年03月29日 13:32:00|评论(loading...)|收藏
Band对象有三类:Desk,Info和Comm以及Tools Bands。其中Desk Bands 用于任务栏;Info和Comm--又称浏览栏(Explorer Bar)--用于IE和资源管理器。Tools Bands用于资源管理器或IE的工具栏。本文的例子代码 MyBands.dll 实现了上述前面两种类型的Band对象应用,并介绍了如何在自己的程序中使用 Bands 对象。由于Tools Bands是IE5以后才有的新特性。有关它的实现细节将在另外一篇文章中介绍,关于 Bands 对象的基本概念请参考另外一篇MSDN译文“Windows区对象(Bands)的创建与定制”。阅读全文>
发表于 @ 2006年03月29日 13:28:00|评论(loading...)|收藏
通常对象集合时要用到枚举器,但枚举器的实现主要是为了集合对象的访问控制,我们可以用CComEnumOnSTL模板去定义自己的枚举器,这样会涉及复杂的复制策略定义及集合方法实现的定义。 阅读全文>
发表于 @ 2006年03月29日 13:24:00|评论(loading...)|收藏
首先,在这里向前段时间没来得及回复你们问题的朋友们说声对不起了,这段时间工作实在太忙,我快倒!哈哈!好了,让我们转入正题,今天要谈的话题是COM,稍微深入一点,不知道大家用过C++Test或者Visual Assistant(可到VC知识库工具栏目下载)之类的软件没有,它们都有个非常引人注目的功能,那就是把它们自身嵌入到VC开发环境中去。这个功能让我痴迷不已,原因只有一个:我想做一个可以嵌入VC开发环境的VC工程解析器(VC/Delphi工程解析器已被收录在VC知识库在线杂志第19期中),这样用户在VC开发环境中就可以直接对当前或所有工程进行各种分析,统计。那么实现它简单吗?简单,Next和Copy即可轻松完成;仅仅这些吗?不是,它的背后还有博大精深的COM做支撑。不管困难与否,还是让我们先试为快。阅读全文>
发表于 @ 2006年03月29日 13:23:00|评论(loading...)|收藏
你也许曾在Office2000下的Word2000、Access2000、Excel2000、PowerPoint2000等软件中的工具条或菜单条资源中,看到一些其它软件加入的新的自定义工具条按钮或菜单条,当点击它们时,会有其不同的响应发生。下面,让我们也来实现这些功能,需要说明的是,在这里我们不用VB/VBA来实现它,而是用VC6中所带ATL(活动模板库)3.0来开发具有这种效果的Office2000内部COM插件。在Office2000中,不管是Word2000、Access2000、Excel120000、PowerPoint2000还是Outlook2000等,它们COM插件的编程方法及步骤都是极其相似的(除注册表中键值及导入相应类型库不同外)。阅读全文>
发表于 @ 2006年03月29日 13:22:00|评论(loading...)|收藏
Office2000/XP中Word下的内部COM插件的实现方法和前面我的文章《 Office2000下内部COM插件的编程实现》中介绍的示例Outlook2000下内部COM插件的实现方法与步骤基本相同,在这里,我想不用再重复哆嗦大部分前面文章里已经讲过的内容了,只将重点放在它们间实现的不同点上,有兴趣的朋友可以参看前面这篇文章,然后再看这篇文章一定会事半功倍的。阅读全文>
发表于 @ 2006年03月29日 13:21:00|评论(loading...)|收藏
Excel2000和PowerPoint2000下内部COM插件的编程实现这篇文章,实际上是 和二篇文章的续篇。采用上篇文章中写作风格,不再重复哆嗦大部分前面文章里已经讲过的内容了,只将重点放在它们间实现的不同点上,有兴趣的朋友可以参看前面二篇文章,然后再看这篇文章及示例源码一定会倍感轻松。阅读全文>
发表于 @ 2006年03月29日 13:20:00|评论(loading...)|收藏
我要编写一个支持ActiveX文档插件(Plug-ins)的应用程序。为了创建一个已安装插件的菜单,在程序启动时我扫描注册表查找已安装的ActiveX组件。对于每一个ActiveX组件创建一个实例并查询一个叫IMyAppPlugin的专门接口。如果这个接口存在,那么我就认为这个组件就是我的程序所要的插件。这样做好像行不通,尤其是安装有多个ActiveX组件时做起来就更困难。有没有更好的办法处理这种问题?阅读全文>
发表于 @ 2006年03月29日 13:16:00|评论(loading...)|收藏
VBScript(JScript)是应用广泛,简单易学的脚本语言。使用VBScript(JScript)调用COM组件则更是容易。那么,如果在你的程序中也能够执行脚本,则在简化程序设计的基础上,还会极大地提升软件的功能。为了方便大家使用这个功能,我写了一个具有自动化(Automation/IDispatch)功能的EXE包装程序来代理调用脚本执行。阅读全文>
发表于 @ 2006年03月29日 13:14:00|评论(loading...)|收藏
很多人认为ATL只是用来编写COM组件的,其实你也可以使用ATL中的窗口类来创建基于窗口的应用程序。虽然你可以将基于MFC的程序转换为ATL,但是ATL中对于UI(译注:用户界面)组件的支持太少了。所以,这就要求你需要自己编写很多代码。例如,在ATL中没有文档/视图,所以在你想使用它的时候就需要自己实现了。在本篇中,我们将要探究一些关于窗口类的秘密,以及ATL技术实现的秘密。WTL(Window Template Library,窗口模板库),虽然到现在(译注:本文于2002年10月27日发表在CodeProject)还不为Microsoft所支持,但是它在制作图形应用程序方面跨出了一大步。WTL就是基于ATL的窗口类的。 阅读全文>
发表于 @ 2006年03月29日 13:13:00|评论(loading...)|收藏
到现在为止,我们还没有讨论过任何有关汇编语言的东西。但是如果我们真的要了解ATL底层内幕的话,就不能回避这一话题,因为ATL使用了一些底层的技术以及一些内联汇编语言来使它更小巧快速。在这里,我假设读者已经拥有了汇编语言的基础知识,所以我只会集中于我的主题,而不会再另外写一份汇编语言的教程。如果你尚未足够了解汇编语言,那么我建议你看一看Matt Pietrek于1998年2月发表在Microsoft System Journal的文章《Under The Hood》,这篇文章会给予你关于汇编语言足够的信息的。 阅读全文>
发表于 @ 2006年03月29日 13:12:00|评论(loading...)|收藏
如果你是个模板的高手,你就可以将ATL的学习作为一种享受。在这一节中,我将要尝试解释一些ATL使用的模板技术。我不能保证你读完本节后能成为一个模板高手,只能是尽我所能让你在读完本文后能够更轻松地理解ATL的源码。 阅读全文>
发表于 @ 2006年03月29日 13:11:00|评论(loading...)|收藏
在本系列的教程中,我要讨论一些ATL的内部工作方式以及它所使用的技术,这是本系列的第二篇文章。 阅读全文>
发表于 @ 2006年03月29日 13:10:00|评论(loading...)|收藏
在本系列的教程中,我要讨论一些ATL的内部工作方式以及它所使用的技术。
在讨论的开始,让我们先看看一个程序的内存分布。首先,编写一个简单的程序,它没有任何的数据成员,你可以看看它的内存结构。 阅读全文>
发表于 @ 2006年03月29日 13:09:00|评论(loading...)|收藏
我的 COM 组件运行时产生一个窗口,当用户双击该窗口的时候,我需要通知调用者;
我的 COM 组件用线程方式下载网络上的一个文件,当我完成任务后,需要通知调用者;
我的 COM 组件完成一个钟表的功能,当预定时间到达的时候,我需要通知调用者;
... ... ... ...
本回书开始话说 COM 的事件、通知、连接点......这些内容比较多,我分两次(共四回)来介绍。阅读全文>
发表于 @ 2006年03月29日 12:08:00|评论(loading...)|收藏
我的 COM 组件运行时产生一个窗口,当用户双击该窗口的时候,我需要通知调用者;
我的 COM 组件用线程方式下载网络上的一个文件,当我完成任务后,需要通知调用者;
我的 COM 组件完成一个钟表的功能,当预定时间到达的时候,我需要通知调用者;
... ... ... ...
本回书开始话说 COM 的事件、通知、连接点......这些内容比较多,我分两次(共四回)来介绍。阅读全文>
发表于 @ 2006年03月29日 12:05:00|评论(loading...)|收藏
程序设计中,错误处理必不可少,而且通常要占用很大的篇幅。本回书着落在 COM 中的错误(异常)的处理方法。
在组件程序中,如果遇到错误,一般有两个方式进行处理。阅读全文>
发表于 @ 2006年03月29日 12:04:00|评论(loading...)|收藏
前段时间,由于工作比较忙,没有能及时地写作。其间收到了很多网友的来信询问和鼓励,在此一并表示感谢。咳......我也需要工作来养家糊口呀...... 上回书介绍了两种方法来写自动化(IDispatch)接口的组件程序,一是用 MFC 方式编写“纯粹”的 IDispatch 接口;二是用 ATL 方式编写“双接口”的组件。 阅读全文>
发表于 @ 2006年03月29日 11:31:00|评论(loading...)|收藏
终于写到了第十回,我也一直期盼着写这回的内容耶,为啥呢?因为自动化(automation)是非常常用、非常有用、非常精彩的一个 COM 功能。由于 WORD、EXCEL 等 OFFICE 软件提供了“宏”的功能,就连我们使用的VC开发环境也提供了“宏”功能,更由于 HTML、ASP、JSP 等都要依靠脚本(Script)的支持,更体现出了自动化接口的重要性。
如果你使用 vc6.0 的开发环境,请阅读前一回。
如果你使用 vc.net 2003,请继续...... 阅读全文>
发表于 @ 2006年03月29日 11:27:00|评论(loading...)|收藏
终于写到了第九回,我也一直期盼着写这回的内容耶,为啥呢?因为自动化(automation)是非常常用、非常有用、非常精彩的一个 COM 功能。由于 WORD、EXCEL 等 OFFICE 软件提供了“宏”的功能,就连我们使用的VC开发环境也提供了“宏”功能,更由于 HTML、ASP、JSP 等都要依靠脚本(Script)的支持,更体现出了自动化接口的重要性。
如果你使用 vc6.0 的开发环境,请继续阅读。
如果你使用 vc.net 2003,请阅读下一回。 阅读全文>
发表于 @ 2006年03月29日 11:25:00|评论(loading...)|收藏
从第五回开始到第七回,咱们用 ATL 写了一个简单的 COM 组件,之所以说简单,是因为在组件中,只实现了一个自定义(custom)的接口 IFun。当然如果想偷懒的话,我们可以把 200 个函数都加到这一个接口中, 果真如此的话,恐怕就没有人喜欢使用我们这个组件了。一个组件既然可以提供多个接口,那么我们在设计的时候,就应该按照函数的功能进行分类,把不同功能分类的函数用多个接口表现出来。这样可以有如下的一些好处:
1、一个接口中的函数个数有限、功能集中,使用者容易学习、记忆和调用。一个接口到底提供多少个函数合适那?答案是:如果你是黑猩猩,那么一个接口最多3个函数,如果你是人,那么一个接口最好不要超过7个函数。(注1)
2、容易维护。至少你肉眼搜索的时候也方便一些呀。
3、容易升级。当我们给组件增加函数的时候,不要修改已经发表的接口,而是提供一个新的接口来完成功能扩展。(注2)
本回书着落在------如何实现一个组件,多个接口。 阅读全文>
发表于 @ 2006年03月29日 11:19:00|评论(loading...)|收藏
上两回中,咱们用 ATL 写了第一个 COM 组件程序,这回中,主要介绍编译、注册和调用方法。示例程序你已经下载了吗?如果还没有下载,vc6.0 的用户点这里,vc.net 的用户点这里。阅读全文>
发表于 @ 2006年03月15日 18:03:00|评论(loading...)|收藏
1、与 《COM 组件设计与应用(五)》的内容基本一致。但本回讲解的是在 vc.net 2003 下的使用方法,即使你不再使用vc6.0,也请和上一回的内容,参照比对。
2、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFun,它有两个函数: Add()完成两个数值的加法,Cat()完成两个字符串的连接。
3、下面......好好听讲! 开始了:-)阅读全文>
发表于 @ 2006年03月15日 18:01:00|评论(loading...)|收藏
1、如果你在使用 vc5.0 及以前的版本,请你升级为 vc6.0 或 vc.net 2003; 2、如果你在使用 vc6.0 (ATL 3.0)请阅读本回内容; 3、如果你在使用 vc.net(ATL 7.0)请阅读下回内容;(当然读读本文内容也不错) 4、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFun,它有两个函数: Add()完成两个数值的加法,Cat()完成两个字符串的连接。 5、下面......好好听讲! 开始了:-) 阅读全文>
发表于 @ 2006年03月15日 17:59:00|评论(loading...)|收藏
书到本回,我们终于开始写代码啦。写点啥那?恩,有了!咱们先从如何调用现成的简单的组件开始吧,同时也顺便介绍一些相关的知识。阅读全文>
发表于 @ 2006年03月15日 17:57:00|评论(loading...)|收藏
上回书介绍了GUID、CLSID、IID和接口的概念。本回的重点是介绍 COM 中的数据类型。咋还不介绍组件程序的设计步骤呀?咳......别着急,别着急!孔子曰:“饭要一口一口地吃”;老子语:“心急吃不了热豆腐”,孙子云:“走一步看一步吧” ...... 先掌握必要的知识,将来写起程序来才会得心应手也:-)
走入正题之前,请大家牢牢记住一条原则:COM 组件是运行在分布式环境中的。比如,你写了一个组件程序(DLL或EXE),那么使用者可能是在本机的某个进程内加载组件(INPROC_SERVER);也可能是从另一个进程中调用组件的进程(LOCAL_SERVER);也可能是在这台计算机上调用地球那边计算机上的组件(REMOTE_SERVER)。所以在理解和设计的时候,要时时刻刻想起这句话。快!拿出小本本,记下来!阅读全文>
发表于 @ 2006年03月15日 17:56:00|评论(loading...)|收藏
书接上回,话说在 doc(Word) 复合文件中,已经解决了保存 xls(Excel) 数据的问题了。那么,接下来又要解决另一个问题:当 WORD 程序读取复合文件,遇到了 xls 数据的时候,它该如何启动 Excel 呢?启动后,又如何让 Excel 自己去读入、解析、显示 xls 数据呢?阅读全文>
发表于 @ 2006年03月15日 17:41:00|评论(loading...)|收藏
一. COM是一个更好的 C++ 1. COM 是什么 2. 从 C++ 到 DLL 再到 COM 2.1 C++ 2.2 DLL 2.3 COM二. COM基础 1. COM基本知识 1.1 返回值HRESULT 1.2 初识idl 1.3 IUnkown接口 2. 一个比较简单的COM 2.1 interface.h文件 2.2 math.h文件 2.3 math.cpp文件 2.4 simple.cpp文件 2.5 Math组件的二进制结构图 2.6 小结三. 纯手工创建一个COM组件 1. 从建工程到实现注册 1.1 创建一个类型为win32 dll工程 1.2 定义接口文件 1.3 增加注册功能 1.3.1 增加一个MathCOM.def文件 1.3.2 DllRegisterServer(阅读全文>
发表于 @ 2006年03月15日 17:05:00|评论(loading...)|收藏
最近我用了一些时间来学习如何编写用于Visual C++ 6.0的Add-In。这是一个有趣的问题,不过总的来说,有关这方面的文档和样例程序仍然比较缺乏(中文的更加罕见)。因此我决定把自己学习过程中的一些心得写出来,和大家共享。阅读全文>
发表于 @ 2006年03月13日 17:59:00|评论(loading...)|收藏
在日常工作中,我看到过许多由不同开发人员编写的 COM 代码。我为许多富于创造性的使用 COM 的工作方式感到惊讶,有一些使 COM 工作的巧妙代码可能连 Microsoft 都没有想到。同样,看到一些错误一次又一次地重犯,使我免不了心灰意懒。这些错误很多都与线程和安全有关,完全不成比例,而这也正是 COM 文档资料中最缺少的两个领域。如果不仔细计划,它们也是最可能遇到的并可能会绊住您的两个领域。阅读全文>
发表于 @ 2006年03月13日 17:53:00|评论(loading...)|收藏
关于普通DLL插件的实现VC知识库里已有文章介绍,但在很多大型的软件中(如ArcGis、Office)中都不是采用这种方法,基于COM的插件在当今的大型软件中应用的更广泛。阅读全文>
发表于 @ 2006年03月13日 17:52:00|评论(loading...)|收藏
本文介绍了一种使用VC++ ATL(Active Template Library),利用IDTExtensibility2接口,为Microsoft Word加入功能简单的COM插件(addin),加入工具栏按钮和菜单等可视部件,并为其加入响应事件的方法,并在最后简单说明了实现与Office宏混合编程的方法。阅读全文>
发表于 @ 2006年03月13日 17:50:00|评论(loading...)|收藏
本文讲述了如何用ATL建立复合控件,以及如何响应连接点事件。考虑到代码很简单,程序中没有加注释,如有不清楚请参看MSDN,代码仓促中完成,不免有疏漏,见谅。
声明:本文仅适合初级中的初级读者。阅读全文>
发表于 @ 2006年03月13日 17:48:00|评论(loading...)|收藏
由于本人在开发中经常要在程序中嵌入浏览器,为了符合自己的需求经常要对浏览器进行扩展和定制, 解决这些问题需在网上找资料和学习的过程,我想可能很多开发者或许会遇到同样的问题,特写此文,以供大家参考。 阅读全文>
发表于 @ 2006年03月13日 17:47:00|评论(loading...)|收藏
这是根据”Dr. GUI and ATL” 的文章自己做的例子程序,主要是在原有接口上继承新的接口,这样在保留原接口的基础上可以扩展新的功能.阅读全文>
发表于 @ 2006年03月13日 16:41:00|评论(loading...)|收藏
Don Box 在《COM 本质论》中说,对接口,类对象和套间有了彻底的理解,那么使用COM,没有翻不过去的山头。如果你对C++有深入的理解,那么《COM本质论》中对接口和类对象的阐述很清晰,理解并不困难。但套间是一个比较抽象的概念,而书上对这部分只是理论的叙述,没有提供具体的例子,理解起来就更困难了。在此我把自己找到的一些例子和自己的理解总结以下,以期给初学者提供一些入门的方法。闲话打住,开始正文吧。 阅读全文>
发表于 @ 2006年03月13日 16:39:00|评论(loading...)|收藏
由于传统的COM技术使用静态的非托管编程,而.net使用动态的托管编程,所以这个题目本质上讨论的是托管与非托管代码之间的互操作中的一个特例。阅读全文>
发表于 @ 2006年03月13日 16:37:00|评论(loading...)|收藏
机子上收藏了几十张经典的VCD光盘录像,但有限的空间实在存储不了那么多的超级文件,删掉又实在舍不得。不得已只好请教高手。黄天不负有心人,经过几天的虚心求教,终于在老鸟那里寻到了一条最佳的解决方案,其操作原理很简单,就是将VCD格式的文件制作成DVD盘片后存储。相信遇到这种情况的朋友还很多,不妨拿出来和大家共享。阅读全文>
发表于 @ 2006年03月11日 20:16:00|评论(loading...)|收藏
机子上收藏了几十张经典的VCD或连续剧,但有限的空间实在存储不了那么多的超级文件,删掉又实在舍不得。不得已只好请教高手。黄天不负有心人,经过几天的虚心求教,终于在老鸟那里寻到了一条最佳的解决方案,其操作原理很简单,就是将VCD格式的文件制作成DVD盘片后存储。相信遇到这种情况的朋友还很多,不妨拿出来和大家共享。阅读全文>
发表于 @ 2006年03月11日 12:35:00|评论(loading...)|收藏
开始折腾“风中之猪”了……“风中之猪”是基于DotMSN的一个MSN机器人。DotMSN真是他妈的强大。它把MSN的协议封装得非常非常好。带的Example也是非常实用,让人一看便能够举一反三,做出更多的东西来。终于有点了解多线程程序是怎么写的了。Well,偶这篇blog不是要说DotMSN或者是“风中之猪”的。我要说的是MSN Messenger。阅读全文>
发表于 @ 2006年03月07日 14:11:00|评论(loading...)|收藏
"MSN Messenger" 这个字眼是相当含糊的,因为微软用这个术语关系了几个不同部分的消息解决方案.你通过"MSN Messenger 网络"聊天,用来连接MSN Messenger 网络的最流行的程序是"MSN Messenger",而程序在MSN Messenger 网络中使用的语言则是"MSN Messenger 协议"。阅读全文>
发表于 @ 2006年03月07日 13:54:00|评论(loading...)|收藏
现在的即时通讯软件琳琅满目,大家耳熟能详的无非就是腾讯公司的QQ,微软公司的MSN Messenger以及网易的泡泡,就用户量而言这三者应该是名列前茅的。但是腾讯公司的QQ以及网易的泡泡由于并没有公开其客户端与服务器之间的通讯协议导致开发者很难利用起这一庞大的用户群体来开辟另外的服务渠道。MSN Messenger这一由世界头号软件商-微软公司开发的即时通讯软件,凭借其与windows操作系统和整个微软产品家族的紧密结合,简单实用、性能稳定、世界通用等特点,很快被中国用户接受,目前其用户正在以几何数字增长。但是让开发者雀跃的是该软件同时也提供了开放的API以及开放的通讯协议。阅读全文>
发表于 @ 2006年03月07日 12:25:00|评论(loading...)|收藏
本文可能夹杂大量技术术语,如果您对此感到不快,请勿继续阅读。
本文仅仅讨论一些思路,不会提供相关源代码,最多也只提供源代码网站的链接。如果您对此有所不满,请勿继续阅读。
本文仅仅从技术角度讨论电子书反编译问题,请勿将之用于侵犯版权等等非法目的,或损害他人利益。如果您对此感到失望,请勿继续阅读。
本文版权归作者所有,转载前请先征得作者书面同意。 阅读全文>
发表于 @ 2006年03月05日 00:19:00|评论(loading...)