﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-cforce</title><link>http://www.cppblog.com/cforce/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:06:09 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:06:09 GMT</pubDate><ttl>60</ttl><item><title>组件需要携带哪些信息</title><link>http://www.cppblog.com/cforce/archive/2012/07/07/182093.html</link><dc:creator>cforce</dc:creator><author>cforce</author><pubDate>Sat, 07 Jul 2012 10:27:00 GMT</pubDate><guid>http://www.cppblog.com/cforce/archive/2012/07/07/182093.html</guid><wfw:comment>http://www.cppblog.com/cforce/comments/182093.html</wfw:comment><comments>http://www.cppblog.com/cforce/archive/2012/07/07/182093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cforce/comments/commentRss/182093.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cforce/services/trackbacks/182093.html</trackback:ping><description><![CDATA[为了管理和使用组件，组件必须提供足够的信息，那么组件究竟需要提供哪些信息呢？<br /><ol><li>组件的ID，即唯一标识符，可以是数字或者字符串。其作用是标识组件，无论是组件管理器还是应用程序(组件使用者)都需要通过这个标识符来标识组件。</li><li>组件的构造方法，用于创建组件的实例。说白了，就是生成组件实例的函数。</li></ol>以上两种信息是必须提供的，无论任何组件管理系统都离不开这两种必须的基本信息。组件自身也必须提供，否则无法使用。<br />可能大家会有疑问，为什么构造方法是必须的，而析构方法不是必须的呢？<br />是这样的，析构方法可以通过组件的实例提供的接口提供。COM里面的IUnkown接口中的Release方法就是个例子。不过组件自身提供析构方法也有其必要性。还是拿COM来做例子，COM虽然通过IUnkown接口提供了Release方法来控制对象的作用域，但是往往由于各种原因，造成某个对方未能及时释放，而该对象引用的对象也无法被释放，and so on，从而造成了COM应用的一个很让人头疼的问题，就一旦有内存泄漏，往往是成片成片的内存泄漏。这个问题很头疼，做过相关开发的同学应该深有体会。如果组件自身能提供析构方法，借助组件/对象管理器就有可能在适当的地方进行资源强制回收。XCA具备这一特性，XCA的组件必须提供析构方法。<br />除此之外我们还需要什么信息呢？我们来发散一下。<br /><ul><li>组件所支持接口的描述</li><li>组件的类别<br /></li><li>组件的描述信息。用于说明组件的用途</li><li>组件的版本。不解释了。</li><li>组件的版权信息</li><li>组件的图标信息</li></ul>这些信息还真不少，不过相信大家可以提出很多需求。要想做一个具备实用价值的组件管理系统，这些信息都有其价值，但如果强制要求用户提供，又不太合适。一方面对于某些应用来说其中有些信息不是必须的；同时对于另外一些应用来说有些信息可能又过繁冗了；同时还存在一种可能，就是这些信息虽然很丰富，但是还不够。<br />你看想做一个通用并且实用的组件管理系统，组件需要哪些信息都众口难调。这真是一个令人沮丧的现象。不过我们相信总有解决方案的。XCA在这方面处理的还不错。<br /><img src ="http://www.cppblog.com/cforce/aggbug/182093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cforce/" target="_blank">cforce</a> 2012-07-07 18:27 <a href="http://www.cppblog.com/cforce/archive/2012/07/07/182093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>组件、接口、类、对象之间的关系</title><link>http://www.cppblog.com/cforce/archive/2012/07/06/181972.html</link><dc:creator>cforce</dc:creator><author>cforce</author><pubDate>Fri, 06 Jul 2012 14:30:00 GMT</pubDate><guid>http://www.cppblog.com/cforce/archive/2012/07/06/181972.html</guid><wfw:comment>http://www.cppblog.com/cforce/comments/181972.html</wfw:comment><comments>http://www.cppblog.com/cforce/archive/2012/07/06/181972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cforce/comments/commentRss/181972.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cforce/services/trackbacks/181972.html</trackback:ping><description><![CDATA[<div>什么是组件<br /><div><div>个人的理解，组件是为了实现某个功能而整合在一起的方法及数据的集合，为了描述组件的特征组件中还包含一些描述信息，诸如组件的名称或ID，提供哪些接口，版本信息等。通常组件是以二进制文件提供的，但也可以以源代码的形式提供，只是这种情况不多见。 			</div> 			 			 				</div><br />组件和类的关系<br /><div>组件可以理解为类的超集，它可能包含若干个类，当然也可以只有一个类；此外组件往往需要提供一些额外的描述信息，供组件管理器管理，而类缺乏这些信息。类加上这些必要的信息，基本上就差不多等同于组件了。不过，通常组件是以二进制形式发布，而类是源代码层面的东西。</div><div><div><br />组件和对象的关系 <div>组件是静态的代码和数据，而对象是动态创建的实体。二者的关系有点像class与对象。</div> </div><br />接口是什么<br />简单的来说，接口可以理解为一种调用形式的约定。接口往往包含一系列的接口函数的描述。接口仅仅描述了这些函数的名称、返回值、调用约定、参数列表以及这些函数的顺序。但是接口并不实现这些函数，它仅仅是一种约定，或者说是一种描述，负责实现它的是对象。</div><br />这些概念挺枯燥的，但是为了后续介绍XCA的整体框架，不得不先把这些概念做个约定。</div><img src ="http://www.cppblog.com/cforce/aggbug/181972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cforce/" target="_blank">cforce</a> 2012-07-06 22:30 <a href="http://www.cppblog.com/cforce/archive/2012/07/06/181972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口是什么</title><link>http://www.cppblog.com/cforce/archive/2012/07/06/181876.html</link><dc:creator>cforce</dc:creator><author>cforce</author><pubDate>Fri, 06 Jul 2012 07:25:00 GMT</pubDate><guid>http://www.cppblog.com/cforce/archive/2012/07/06/181876.html</guid><wfw:comment>http://www.cppblog.com/cforce/comments/181876.html</wfw:comment><comments>http://www.cppblog.com/cforce/archive/2012/07/06/181876.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cforce/comments/commentRss/181876.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cforce/services/trackbacks/181876.html</trackback:ping><description><![CDATA[<div>简单的来说，接口可以理解为一种调用形式的约定。接口往往包含一系列的接口函数的描述。接口仅仅描述了这些函数的名称、返回值、调用约定、参数列表以及这些函数的顺序。但是接口并不实现这些函数，它仅仅是一种约定，或者说是一种描述，负责实现它的是对象。</div><img src ="http://www.cppblog.com/cforce/aggbug/181876.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cforce/" target="_blank">cforce</a> 2012-07-06 15:25 <a href="http://www.cppblog.com/cforce/archive/2012/07/06/181876.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>组件和对象的关系</title><link>http://www.cppblog.com/cforce/archive/2012/07/06/181875.html</link><dc:creator>cforce</dc:creator><author>cforce</author><pubDate>Fri, 06 Jul 2012 07:25:00 GMT</pubDate><guid>http://www.cppblog.com/cforce/archive/2012/07/06/181875.html</guid><wfw:comment>http://www.cppblog.com/cforce/comments/181875.html</wfw:comment><comments>http://www.cppblog.com/cforce/archive/2012/07/06/181875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cforce/comments/commentRss/181875.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cforce/services/trackbacks/181875.html</trackback:ping><description><![CDATA[<div><div>组件是静态的代码和数据，而对象是动态创建的实体。二者的关系有点像class与对象。</div></div><img src ="http://www.cppblog.com/cforce/aggbug/181875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cforce/" target="_blank">cforce</a> 2012-07-06 15:25 <a href="http://www.cppblog.com/cforce/archive/2012/07/06/181875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>组件和类的什么关系</title><link>http://www.cppblog.com/cforce/archive/2012/07/06/181874.html</link><dc:creator>cforce</dc:creator><author>cforce</author><pubDate>Fri, 06 Jul 2012 07:24:00 GMT</pubDate><guid>http://www.cppblog.com/cforce/archive/2012/07/06/181874.html</guid><wfw:comment>http://www.cppblog.com/cforce/comments/181874.html</wfw:comment><comments>http://www.cppblog.com/cforce/archive/2012/07/06/181874.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cforce/comments/commentRss/181874.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cforce/services/trackbacks/181874.html</trackback:ping><description><![CDATA[<div>组件可以理解为类的超集，它可能包含若干个类，当然也可以只有一个类；此外组件往往需要提供一些额外的描述信息，供组件管理器管理，而类缺乏这些信息。类加上这些必要的信息，基本上就差不多等同于组件了。不过，通常组件是以二进制形式发布，而类是源代码层面的东西。</div><img src ="http://www.cppblog.com/cforce/aggbug/181874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cforce/" target="_blank">cforce</a> 2012-07-06 15:24 <a href="http://www.cppblog.com/cforce/archive/2012/07/06/181874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是组件</title><link>http://www.cppblog.com/cforce/archive/2012/07/06/181873.html</link><dc:creator>cforce</dc:creator><author>cforce</author><pubDate>Fri, 06 Jul 2012 07:23:00 GMT</pubDate><guid>http://www.cppblog.com/cforce/archive/2012/07/06/181873.html</guid><wfw:comment>http://www.cppblog.com/cforce/comments/181873.html</wfw:comment><comments>http://www.cppblog.com/cforce/archive/2012/07/06/181873.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cforce/comments/commentRss/181873.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cforce/services/trackbacks/181873.html</trackback:ping><description><![CDATA[先谈谈什么是组件吧。<br />个人的理解，组件是为了实现某个功能而整合在一起的方法及数据的集合，为了描述组件的特征组件中还包含一些描述信息，诸如组件的名称或ID，提供哪些接口，版本信息等。通常组件是以二进制文件提供的，但也可以以源代码的形式提供，只是这种情况不多见。<img src ="http://www.cppblog.com/cforce/aggbug/181873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cforce/" target="_blank">cforce</a> 2012-07-06 15:23 <a href="http://www.cppblog.com/cforce/archive/2012/07/06/181873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第一篇随笔，权当做个测试</title><link>http://www.cppblog.com/cforce/archive/2012/07/06/181868.html</link><dc:creator>cforce</dc:creator><author>cforce</author><pubDate>Fri, 06 Jul 2012 07:02:00 GMT</pubDate><guid>http://www.cppblog.com/cforce/archive/2012/07/06/181868.html</guid><wfw:comment>http://www.cppblog.com/cforce/comments/181868.html</wfw:comment><comments>http://www.cppblog.com/cforce/archive/2012/07/06/181868.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cforce/comments/commentRss/181868.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cforce/services/trackbacks/181868.html</trackback:ping><description><![CDATA[一直计划抽空把自己的可扩展组件框架（eXtensible Component Architecture）的设计思路整理一下，但由于各种原因计划一直搁置。<br />转眼间在工作岗位上十多年的光阴过去，也是时候重新审视一下自己走过的历程。未来未必会继续从事现在的职业，写下点东西，将来也好回忆一下。于是又动了这个念头，但不知道能不能坚持下去。花几天时间大概整理一下试试吧。<img src ="http://www.cppblog.com/cforce/aggbug/181868.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cforce/" target="_blank">cforce</a> 2012-07-06 15:02 <a href="http://www.cppblog.com/cforce/archive/2012/07/06/181868.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>