<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://royqh.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2froyqh.spaces.live.com%2fcategory%2f%e7%bc%96%e7%a8%8b%e6%8a%80%e5%b7%a7%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>天上掉大饼之土人俗事: 编程技巧</title><description /><link>http://royqh.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=cat%25E7%25BC%2596%25E7%25A8%258B%25E6%258A%2580%25E5%25B7%25A7</link><language>en-US</language><pubDate>Sat, 11 Oct 2008 05:01:04 GMT</pubDate><lastBuildDate>Sat, 11 Oct 2008 05:01:04 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://royqh.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>-3180137652934690665</live:id><live:alias>royqh</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Spring框架下的单元测试</title><link>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!351.entry</link><description>    花时间好好看了一下Spring参考手册的Testing一章，同时参考了SpringSide和Spring自己的例子，把基于Spring框架的单元测试写法搞清楚了。&lt;br&gt;    其实写基于Spring框架的单元测试是一件很简单的事情。它提供了一个基类AbstractDependencyInjectionSpringContextTests，其中封装了载入Application Context和初始化Beans的功能，你只需要完成下面三步工作，就可以生成一个完成的测试类。&lt;br&gt;1）让你的测试类继承AbstractDependencyInjectionSpringContextTests，下面是演示代码&lt;br&gt;public class MyTestCase extends AbstractDependencyInjectionSpringContextTests {&lt;br&gt;}&lt;br&gt;2)在你的测试类中实现getConfigLocations()方法。你在这个方法中应该返回Application Context配置文件的路径。&lt;br&gt;可以直接用实际工作代码中使用的Application Context配置文件，也可以专门为测试写单独的配置文件。&lt;br&gt;public class MyTestCase extends AbstractDependencyInjectionSpringContextTests {&lt;br&gt;    protected String[] getConfigLocations() {&lt;br&gt;        return new String[] {&amp;quot;MyApplicationContext.xml&amp;quot;,&amp;quot;MyApplicationContext.xml&amp;quot;};&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;3)为那些需要在测试类中进行测试的beans写一个Setter。比如，我的程序在Application Context中声明了一个叫MyWorkBean的Bean。我想在测试类中对它进行测试。那么我的测试类就可以这么写：&lt;br&gt;&lt;br&gt;public class MyTestCase extends AbstractDependencyInjectionSpringContextTests {&lt;br&gt;    protected MyWorkBeanClass myWorkBean;&lt;br&gt;    protected String[] getConfigLocations() {&lt;br&gt;        return new String[] {&amp;quot;MyApplicationContext.xml&amp;quot;};&lt;br&gt;    }&lt;br&gt;    public void setMyWorkBean(MyWorkBeanClass myWorkBean) {&lt;br&gt;        this.myWorkBean=myWorkBean;&lt;br&gt;    }&lt;br&gt;    //接下来是实际的测试方法&lt;br&gt;    public void testMethod1() {&lt;br&gt;        .....&lt;br&gt;    }&lt;br&gt;    public void testMethod2() {&lt;br&gt;        .....&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;这里需要说明的是，AbstractDependencyInjectionSpringContextTests缺省在用Setter设置Bean的时候，使用的是by type的机制。这样，如果存在多个同类的bean，特别是在使用了范型类的情况下，它就无法正确的设置Bean，会产生一个Exception。在这种情况下，可以在我们的测试类的构造函数中设置一下用其他的机制来自动设置Bean。比如可以这样设置用By name的方式来自动设置：&lt;br&gt;public class MyTestCase extends AbstractDependencyInjectionSpringContextTests {&lt;br&gt;    protected MyWorkBeanClass myWorkBean;&lt;br&gt;    public MyTestCase() {&lt;br&gt;        Super();&lt;br&gt;        this.setAutowireMode(AUTOWIRE_BY_NAME);&lt;br&gt;    }&lt;br&gt;    public void setMyWorkBean(MyWorkBeanClass myWorkBean) {&lt;br&gt;        this.myWorkBean=myWorkBean;&lt;br&gt;    }    &lt;br&gt;    ....&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;上面这三步在Eclipse等IDE中可以很方便的完成。Spring的AbstractDependencyInjectionSpringContextTests类除了自动完成载入Application Context和初始化Beans的工作外，它还有一个特别好的地方就是会自动Cache 载入的Application Context和Beans。这样，如果你有多个测试类，实际测试时就不需要为每个测试类都载入一次Application Context,大大减少了测试需要的时间。&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3180137652934690665&amp;page=RSS%3a+Spring%e6%a1%86%e6%9e%b6%e4%b8%8b%e7%9a%84%e5%8d%95%e5%85%83%e6%b5%8b%e8%af%95&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=royqh.spaces.live.com&amp;amp;GT1=royqh"&gt;</description><comments>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!351.entry#comment</comments><guid isPermaLink="true">http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!351.entry</guid><pubDate>Fri, 15 Dec 2006 08:25:25 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://royqh.spaces.live.com/blog/cns!D3DDE1A75BFBB897!351/comments/feed.rss</wfw:commentRss><wfw:comment>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!351.entry#comment</wfw:comment><dcterms:modified>2006-12-15T08:25:25Z</dcterms:modified></item><item><title>JDK5中范型类和Spring的配合</title><link>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!348.entry</link><description>最近在用Spring框架写项目，里面有很多的DAO操作。一开始的时候，我给每个实体类都写了一个对应的&lt;br&gt;DAO类。很快，我就意识到，其实用的所有DAO类的基础操作都是完全相同的，因此这里应该可以利用JDK5&lt;br&gt;对范型的支持，用一个范型的DAO类来代替现有的全部DAO类。&lt;br&gt;&lt;br&gt;按照Spring的IOC模式，接口和实现应该分离。所以首先要做的是定义一个范型的接口：&lt;br&gt;&lt;br&gt;public interface IPersistor&amp;lt;T, K&amp;gt; {&lt;br&gt;    public K save(T obj) throws PersistException;&lt;br&gt;    public void update(T obj) throws PersistException;&lt;br&gt;    public void delete(T obj) throws PersistException;&lt;br&gt;    public T load(K id) throws PersistException, NotFoundInPersistenceException;&lt;br&gt;}&lt;br&gt;&lt;br&gt;之后，就需要实现这个接口。实现本身并没有什么太复杂的问题。但是Spring的applicationContext配置文件&lt;br&gt;并不支持直接使用 &lt;br&gt;    &amp;lt;bean id=&amp;quot;someBean&amp;quot; class=&amp;quot;somepackage.SomeClass &amp;amp;lt; EntityClass, KeyClass &amp;amp;gt;&amp;quot; /&amp;gt;&lt;br&gt;这样的方式来生成范型类的实体对象（注意，在xml中&amp;lt;和&amp;gt;需要对应替换为&amp;amp;lt;和&amp;amp;gt;）。所以必须得在我们的&lt;br&gt;实现类中做一点小小的trick，在构造器中增加一个特殊的参数。&lt;br&gt;（参考，http://www-128.ibm.com/developerworks/java/library/j-genericdao.html）&lt;br&gt;&lt;br&gt;&lt;br&gt;public class HibernatePersistor&amp;lt;T,K extends Serializable&amp;gt; extends HibernateDaoSupport implements&lt;br&gt;        IPersistor&amp;lt;T,K&amp;gt; {&lt;br&gt;    private Class&amp;lt;T&amp;gt; type;&lt;br&gt;    &lt;br&gt;    public HibernatePersistor(Class&amp;lt;T&amp;gt; type) {&lt;br&gt;        this.type=type;&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    public T load(K id) throws PersistException, NotFoundInPersistenceException {&lt;br&gt;        Session session=getSession(false);&lt;br&gt;        T obj;&lt;br&gt;        obj=(T)session.get(type, id);&lt;br&gt;        if (obj==null) {&lt;br&gt;            throw new NotFoundInPersistenceException(type.getName()+&amp;quot; &amp;quot;+id+&amp;quot;not found&amp;quot;);&lt;br&gt;        }&lt;br&gt;        session.evict(obj);&lt;br&gt;        return obj;&lt;br&gt;    }&lt;br&gt;} &lt;br&gt;这样，在Spring的配置文件中就可以这样来声明一个特定的实例：&lt;br&gt;&amp;lt;bean id=&amp;quot;myEntityBeanPersistor&amp;quot; class=&amp;quot;dao.HibernatePersistor&amp;quot; &amp;gt;&lt;br&gt;    &amp;lt;constructor-arg&amp;gt;&lt;br&gt;        &amp;lt;value&amp;gt;entity.MyEntityBean&amp;lt;/value&amp;gt;&lt;br&gt;    &amp;lt;/constructor-arg&amp;gt;&lt;br&gt;    &amp;lt;property name=&amp;quot;sessionFactory&amp;quot; /&amp;gt;&lt;br&gt;&amp;lt;/bean&amp;gt;&lt;br&gt;&lt;br&gt;这样我们就可以在其它的Bean中使用它了。&lt;br&gt;比如我有这样一个类：&lt;br&gt;public class BusinessProcessor {&lt;br&gt;    private IPersistor&amp;lt;entity.BusinessObject, Long&amp;gt; persitor;&lt;br&gt;    &lt;br&gt;    @Required &lt;br&gt;    public setPersistor(IPersistor&amp;lt;entity.BusinessObject, Long&amp;gt; persistor) {&lt;br&gt;        this.persistor=persistor;&lt;br&gt;    }&lt;br&gt;    &lt;br&gt;    public process() {&lt;br&gt;        BusinessObject obj=new BusinessObject();&lt;br&gt;        persitor.save(obj);&lt;br&gt;        ....&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;在Spring中的对应配置是：&lt;br&gt;&amp;lt;bean id=&amp;quot;processor&amp;quot; class=&amp;quot;business.BusinessProcessor&amp;quot; &amp;gt;&lt;br&gt;    &amp;lt;property name=&amp;quot;persistor&amp;quot; ref=&amp;quot;myEntityBeanPersitory&amp;quot; /&amp;gt;&lt;br&gt;&amp;lt;/bean&amp;gt;&lt;br&gt;&lt;br&gt;然后就可以正常使用processor这个实例来进行处理了。&lt;br&gt;&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3180137652934690665&amp;page=RSS%3a+JDK5%e4%b8%ad%e8%8c%83%e5%9e%8b%e7%b1%bb%e5%92%8cSpring%e7%9a%84%e9%85%8d%e5%90%88&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=royqh.spaces.live.com&amp;amp;GT1=royqh"&gt;</description><comments>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!348.entry#comment</comments><guid isPermaLink="true">http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!348.entry</guid><pubDate>Wed, 13 Dec 2006 07:11:22 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://royqh.spaces.live.com/blog/cns!D3DDE1A75BFBB897!348/comments/feed.rss</wfw:commentRss><wfw:comment>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!348.entry#comment</wfw:comment><dcterms:modified>2006-12-13T07:11:22Z</dcterms:modified></item><item><title>自己做的控件没有有效签名时绕过ie安全检查的方法</title><link>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!344.entry</link><description>对于控件安全性，最好的方法是找一个证书颁发机构花钱买一个证书&lt;br&gt;其实花钱也不多&lt;br&gt;&lt;br&gt;不过对于特定范围内使用的网站，如单位的内部网等，或者是个人学习开发，&lt;br&gt;如果舍不得花钱，也可以用下面的方法绕过IE的安全性检查:&lt;br&gt;&lt;br&gt;1、进入IE浏览器，进入【工具】-【Intenet选项】-【安全】对话框&lt;br&gt;    选中【受信任的站点】,然后点击【站点】打开对话框.&lt;br&gt;    把“对该区域中的所有站点要求服务器验证”前面的勾取消;&lt;br&gt;    在“把该网站添加到区域中”下面输入包含自己控件的网址;&lt;br&gt;    点击确定按钮&lt;br&gt;2、在【工具】-【Intenet选项】-【安全】对话框中选中【受信任的站点】&lt;br&gt;    然后点击【自定义级别】打开设置对话框.&lt;br&gt;    把&amp;quot;ActiveX控件和插件&amp;quot;中的&amp;quot;对没有标记为安全的ActiveX控件进行初始化和脚本运行&amp;quot;设置为&amp;quot;启用&amp;quot;&lt;br&gt;    点击确定按钮&lt;br&gt;&lt;br&gt;    重起IE之后,就OK了&lt;br&gt;        &lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3180137652934690665&amp;page=RSS%3a+%e8%87%aa%e5%b7%b1%e5%81%9a%e7%9a%84%e6%8e%a7%e4%bb%b6%e6%b2%a1%e6%9c%89%e6%9c%89%e6%95%88%e7%ad%be%e5%90%8d%e6%97%b6%e7%bb%95%e8%bf%87ie%e5%ae%89%e5%85%a8%e6%a3%80%e6%9f%a5%e7%9a%84%e6%96%b9%e6%b3%95&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=royqh.spaces.live.com&amp;amp;GT1=royqh"&gt;</description><comments>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!344.entry#comment</comments><guid isPermaLink="true">http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!344.entry</guid><pubDate>Wed, 29 Nov 2006 07:07:51 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://royqh.spaces.live.com/blog/cns!D3DDE1A75BFBB897!344/comments/feed.rss</wfw:commentRss><wfw:comment>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!344.entry#comment</wfw:comment><dcterms:modified>2006-12-13T07:12:52Z</dcterms:modified></item><item><title>Eclipse真是好啊真是好</title><link>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!343.entry</link><description>Eclipse的Refactor功能用起来太爽了。我喜欢边写程序边refactor，没有工具的话做起来挺麻烦的（但还是值得的，所以）。上次用vi写一个基于Php和Ajax的Web项目，每次refactor都要费很多劲。这次这个项目是基于java的，用Eclipse写，refactor起来就轻松多了，写起来心情也舒畅。&lt;br&gt;我现在觉得，评价一个编辑器是不是好用，最重要的不是调试功能，而是语法高亮、智能提示和自动完成，再有就是对refactor的支持了。&lt;br&gt;其实eclipse也有php的插件，等有空也要琢磨琢磨，呵呵。&lt;br&gt;另外，linux下跑eclipse确实比windows下慢很多，没办法。现在还是转回windows平台搞开发了。&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3180137652934690665&amp;page=RSS%3a+Eclipse%e7%9c%9f%e6%98%af%e5%a5%bd%e5%95%8a%e7%9c%9f%e6%98%af%e5%a5%bd&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=royqh.spaces.live.com&amp;amp;GT1=royqh"&gt;</description><comments>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!343.entry#comment</comments><guid isPermaLink="true">http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!343.entry</guid><pubDate>Wed, 29 Nov 2006 03:10:58 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://royqh.spaces.live.com/blog/cns!D3DDE1A75BFBB897!343/comments/feed.rss</wfw:commentRss><wfw:comment>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!343.entry#comment</wfw:comment><dcterms:modified>2006-12-13T07:14:23Z</dcterms:modified></item><item><title>用ATL写简单的ActiveX控件</title><link>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!342.entry</link><description>我正在做的项目需要用读卡器来读数据，由于系统是B/S架构的&lt;br&gt;所以只能把读卡器的驱动封装成一个无界面的ActiveX控件，这样web页面中的js代码才能访问读卡器&lt;br&gt;&lt;br&gt;其实做起来也挺简单的，我用的环境是VS2005，步骤如下。&lt;br&gt;打开VS2005后：&lt;br&gt;1。创建一个ATL Project。Application Setting选择为:&lt;br&gt;    Server-Type：Dynamic-Link Library (dll)&lt;br&gt;    Additional-Options: Allow merging of proxy/stub code&lt;br&gt;    这里说一句,对于所有只用于web的activex控件,不管有没有界面，都应该用这两个选项。&lt;br&gt;2。选择菜单“Project-&amp;gt;Add Class..”，创建控件类。因为这里要建的是无界面的ActiveX控件，所以选择&lt;br&gt;使用的Class Template为“ATL Simple Object”。之后填写类名，这里假设为“MyActiveX”。之后的Option选择为：&lt;br&gt;    Threading Model: single (对于所有只用于web的ActiveX控件来说，这个选项够了）&lt;br&gt;    Interface: Dual&lt;br&gt;    Aggregration: none （我这个类不需要别的COM组件聚合，所以none足够了）&lt;br&gt;  如果需要增加事件支持（类似于DOM中的Event）的话，还应该把Connection Points选上。我这里不需要这个，所以就不选了。&lt;br&gt;  最后点击“finish”按钮完成创建。&lt;br&gt;3。增加method和property定义。直接在Class View视图上右键单击接口IMyActiveX，会弹出一个上下文菜单，通过里面的&amp;quot;ADD-&amp;gt;Add Method...&amp;quot;和&amp;quot;ADD-&amp;gt;Add Property..&amp;quot;&lt;br&gt;菜单项即可自动生成method或者property定义。然后直接写实现代码即可。&lt;br&gt;    注意：最好先搞清楚in/out/retval等参数类型以及BSTR/VARIANT等变量类型的作用和使用方法后再开始写代码。否则很容易出现各种问题。&lt;br&gt;4。编写完代码并编译成dll之后，用regsvr32注册生成的dll。&lt;br&gt;    然后写测试html页：&lt;br&gt;    &amp;lt;html&amp;gt;&lt;br&gt;    &amp;lt;body&amp;gt;&lt;br&gt;    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; &amp;gt;&lt;br&gt;        function doTest() {&lt;br&gt;            var ret=test.myTestMethod();&lt;br&gt;            alert(ret);&lt;br&gt;        }&lt;br&gt;    &amp;lt;/script&amp;gt;&lt;br&gt;    &amp;lt;object id=&amp;quot;test&amp;quot; classid=&amp;quot;clsid:21EB133E-EF6C-451B-94AA-EB74C3B2ED12&amp;quot; &amp;gt;&lt;br&gt;    &amp;lt;/object&amp;gt;&lt;br&gt;        &amp;lt;button onclick=&amp;quot;doTest();&amp;quot;&amp;gt;lala&amp;lt;/button&amp;gt;&lt;br&gt;    &amp;lt;/body&amp;gt;&lt;br&gt;    用ie打开测试页就可以测试我们的ActiveX类了。&lt;br&gt;    注意：页面里面定义object时需要一个classid。这个classid可以从工程中的&amp;quot;工程名.idl&amp;quot;文件中得到。&lt;br&gt;    文件最下面会有这样一段：&lt;br&gt;    library MyActiveXProjectLib&lt;br&gt;    {&lt;br&gt;        importlib(&amp;quot;stdole2.tlb&amp;quot;);&lt;br&gt;        [&lt;br&gt;            uuid(21EB133E-EF6C-451B-94AA-EB74C3B2ED12),&lt;br&gt;            helpstring(&amp;quot;MyActiveX Class&amp;quot;)&lt;br&gt;        ]&lt;br&gt;        coclass CMyActiveX&lt;br&gt;        {&lt;br&gt;            [default] interface IMyActiveX;&lt;br&gt;        };&lt;br&gt;    };&lt;br&gt;    这里面的uuid(21EB133E-EF6C-451B-94AA-EB74C3B2ED12)就是我们要的classid。&lt;br&gt;&lt;br&gt;5。测试完毕之后就是打包了。首先要写包的inf文件。假设文件名为myactivex.inf。内容如下：&lt;br&gt;  [version]  &lt;br&gt;  signature=&amp;quot;$CHINA$&amp;quot;  &lt;br&gt;  AdvancedINF=2.0  &lt;br&gt;   &lt;br&gt;  [Add.Code]  &lt;br&gt;  atl71.dll = atl71.dll  &lt;br&gt;  CardReader.dll = CardReader.dll&lt;br&gt;  &lt;br&gt;  [atl71.dll]  &lt;br&gt;  file-win32-x86=thiscab  &lt;br&gt;  FileVersion=7,10,3077,0 &lt;br&gt;  DestDir=11  &lt;br&gt;  RegisterServer=yes    &lt;br&gt; &lt;br&gt;  [CardReader.dll]  &lt;br&gt;  file-win32-x86=thiscab  &lt;br&gt;  clsid={21EB133E-EF6C-451B-94AA-EB74C3B2ED12}&lt;br&gt;  FileVersion=1,0,0,1&lt;br&gt;  RegisterServer=yes     &lt;br&gt;  inf文件的具体格式可以参考相关文档。这里要说明的是，在inf文件中必须包含控件用到的所有dll文件。&lt;br&gt;  然后用cabarc程序打包：&lt;br&gt;  cabacr -s 6144 N myactivex.cab atl71.dll CardReader.dll myactivex.inf&lt;br&gt;  签名的问题我还没完全搞定，搞定再说吧。&lt;br&gt;  最后在网页中加入下面的代码，就可以使用这个控件了。&lt;br&gt;    &amp;lt;object id=&amp;quot;myactivex&amp;quot; classid=&amp;quot;clsid:21EB133E-EF6C-451B-94AA-EB74C3B2ED12&amp;quot; codebase=&amp;quot;http://url-to-my-server/myactivex.cab&amp;quot;&amp;gt;&lt;br&gt;    &amp;lt;/object&amp;gt;  &lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3180137652934690665&amp;page=RSS%3a+%e7%94%a8ATL%e5%86%99%e7%ae%80%e5%8d%95%e7%9a%84ActiveX%e6%8e%a7%e4%bb%b6&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=royqh.spaces.live.com&amp;amp;GT1=royqh"&gt;</description><comments>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!342.entry#comment</comments><guid isPermaLink="true">http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!342.entry</guid><pubDate>Tue, 28 Nov 2006 09:20:08 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://royqh.spaces.live.com/blog/cns!D3DDE1A75BFBB897!342/comments/feed.rss</wfw:commentRss><wfw:comment>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!342.entry#comment</wfw:comment><dcterms:modified>2006-12-13T07:14:33Z</dcterms:modified></item><item><title>搞定Spring中的Declarative Transaction管理了</title><link>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!341.entry</link><description>这个按照Spring reference上的说明,在applicationContext配置文件中加上下面的定义就可以了:&lt;br&gt;&amp;lt;aop:aspectj-autoproxy /&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;tx:annotation-driven transaction-manager=&amp;quot;transactionManager&amp;quot; /&amp;gt;&lt;br&gt;当然,配置文件还必须对transactionManager进行定义,这里从略.此外,别忘了需要在配置头部加入&lt;br&gt;aop和tx两个命名空间的绑定:&lt;br&gt;&amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;br&gt;    xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br&gt;    xmlns:aop=&amp;quot;http://www.springframework.org/schema/aop&amp;quot;&lt;br&gt;    xmlns:tx=&amp;quot;http://www.springframework.org/schema/tx&amp;quot;&lt;br&gt;    xsi:schemaLocation=&amp;quot;&lt;br&gt;        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&lt;br&gt;        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd&lt;br&gt;        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd&amp;quot;&amp;gt;&lt;br&gt;&lt;br&gt;最后说一点必须要注意的,上面的定义和需要aop transaction 管理的beans必须放在一个applicationContext中进行初始化.子context中的bean是不会被aop的.&lt;br&gt;比如在Spring MVC中,org.springframework.web.context.ContextLoaderListener的配置文件中的aop和tx定义不会对org.springframework.web.servlet.DispatcherServlet的beans生效.这点还是挺让人郁闷的.我今天就被这个折腾惨了.&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3180137652934690665&amp;page=RSS%3a+%e6%90%9e%e5%ae%9aSpring%e4%b8%ad%e7%9a%84Declarative+Transaction%e7%ae%a1%e7%90%86%e4%ba%86&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=royqh.spaces.live.com&amp;amp;GT1=royqh"&gt;</description><comments>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!341.entry#comment</comments><guid isPermaLink="true">http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!341.entry</guid><pubDate>Mon, 27 Nov 2006 14:06:10 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://royqh.spaces.live.com/blog/cns!D3DDE1A75BFBB897!341/comments/feed.rss</wfw:commentRss><wfw:comment>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!341.entry#comment</wfw:comment><dcterms:modified>2006-12-13T07:14:46Z</dcterms:modified></item><item><title>搞定Spring下的Hibernate-Annotation了</title><link>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!340.entry</link><description>弄了半天才发现是因为我声明实体类用的注解类错了。我用的是org.hibernate.annotation.Entity,必须用javax.persistence.Entity才可以。我晕……&lt;br&gt;&lt;br&gt;配置方法很简单.&lt;br&gt;1.在项目的Class Path中加入hibernate和hibernate-annotation需要的包&lt;br&gt;2.在Spring的applicationContext配置文件中加入创建Hibernate SessionFactory的Factory Bean定义:&lt;br&gt;&amp;lt;bean id=&amp;quot;sessionFactory&amp;quot; class=&amp;quot;org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean&amp;quot; &amp;gt;&lt;br&gt;    &amp;lt;property name=&amp;quot;configLocation&amp;quot; value=&amp;quot;classpath:hibernate.cfg.xml&amp;quot; /&amp;gt;&lt;br&gt;&amp;lt;/bean&amp;gt;&lt;br&gt;&lt;br&gt;这里用hibernate.cfg.xml作为hibernate的配置文件.&lt;br&gt;3.最后按照hibernate-annotation reference中的要求来写实体类(Entity Bean)的注解(annotation)就行了.&lt;br&gt;需要注意的是不要犯我的错误,记住@Entity注解对应的类是javax.persistence.Entity,一定不能搞错了.&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3180137652934690665&amp;page=RSS%3a+%e6%90%9e%e5%ae%9aSpring%e4%b8%8b%e7%9a%84Hibernate-Annotation%e4%ba%86&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=royqh.spaces.live.com&amp;amp;GT1=royqh"&gt;</description><comments>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!340.entry#comment</comments><guid isPermaLink="true">http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!340.entry</guid><pubDate>Mon, 27 Nov 2006 13:28:11 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://royqh.spaces.live.com/blog/cns!D3DDE1A75BFBB897!340/comments/feed.rss</wfw:commentRss><wfw:comment>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!340.entry#comment</wfw:comment><dcterms:modified>2006-12-13T07:14:56Z</dcterms:modified></item><item><title>被Hibernate和MySQL郁闷了</title><link>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!252.entry</link><description>用Hibernate+Spring MVC开发系统，&lt;br&gt;被MySQL的乱码问题折腾了一下午，总算搞定了&lt;br&gt;&lt;br&gt;简单说一下出现的问题及解决方法吧：&lt;br&gt;1.把系统全部设成UTF-8编码。这个是基础工作，不多说了；&lt;br&gt;2.在hibernate.cfg.xml中设置由hibernate自动生成数据表。&lt;br&gt;3.在mysql的配置文件my.ini中的[mysqld]段中设置数据库服务器端的编码为UTF-8&lt;br&gt;    [mysqld]&lt;br&gt;    default-character-set=utf8&lt;br&gt;    （因为mysql的jdbc driver不调用mysql client lib，所以不需要配置[mysql]段中的连接参数。&lt;br&gt;    当然如果也用其他的如php之类的连接php，那么也应该设置一下[mysql]段）&lt;br&gt;3.1重起mysql server&lt;br&gt;4.在jdbc 的connection url中使用useUnicode和characterEncoding参数&lt;br&gt;    我的连接url如下：&lt;br&gt;    jdbc:mysql://localhost/groupcharge?useUnicode=true&amp;amp;characterEncoding=UTF-8&lt;br&gt;    需要注意的是，因为xml规范规定&amp;quot;&amp;amp;&amp;quot;字符在xml文档中有特殊含义，所以如果url是在&lt;br&gt;    xml格式的配置文件中配置的话，应该把&amp;amp;换成对应的转义符&amp;amp;amp;&lt;br&gt;5.如果数据库和数据表是在修改服务器端编码前创建的，则应该将它们的编码也修改为utf8&lt;br&gt;（我就是在这一步上吃了亏，折腾了很久）&lt;br&gt;&lt;br&gt;这样就可以保证连接mysql数据库没有问题了&lt;br&gt;&lt;br&gt;&lt;br&gt;btw：&lt;br&gt;生产服务器要用oracle，缺省字符集是GBK。估计到时候还得折腾，sigh。其实以这个系统的要求完全没必要用Oracle，不过项目负责人似乎只听说过Oracle……&lt;br&gt;&lt;br&gt;另外，在Spring下如何配置Hibernate使用Annotation来自动生成Entity信息还是没搞定。只能先凑合着用hbm.xml了。其实我觉得用xml比annotation看起来更舒服，不过确实配置起来不舒服，另外从理论上讲，把Entity信息直接写在Class代码里也最合理。等有时间再来好好折腾折腾吧。&lt;br&gt;&lt;br&gt;明天去取照片，回来就可以贴片片了，嘿嘿&lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3180137652934690665&amp;page=RSS%3a+%e8%a2%abHibernate%e5%92%8cMySQL%e9%83%81%e9%97%b7%e4%ba%86&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=royqh.spaces.live.com&amp;amp;GT1=royqh"&gt;</description><comments>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!252.entry#comment</comments><guid isPermaLink="true">http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!252.entry</guid><pubDate>Fri, 24 Nov 2006 09:12:12 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://royqh.spaces.live.com/blog/cns!D3DDE1A75BFBB897!252/comments/feed.rss</wfw:commentRss><wfw:comment>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!252.entry#comment</wfw:comment><dcterms:modified>2006-12-13T07:15:07Z</dcterms:modified></item><item><title>VC的预编译头问题</title><link>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!197.entry</link><description>&lt;div&gt;今天在用VC写程序的时候遇到了问题。我的程序是这样的，UI用WTL写，而中间处理部分则用到了自己前两天写的函数库。在编译到函数库的cpp文件时出错：fatal error C1010: 在查找预编译头指令时遇到意外的文件结尾。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;网上说在cpp文件里加上#include &amp;quot;stdafx.h&amp;quot;即可，可是这样库文件就太ugly了，而且用在别的地方也会有问题；&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;也有说把vc项目属性里的C++/预编译头/创建使用预编译头选项改为“不使用预编译头”也行，可是WTL缺省用到这个，改起来也很麻烦；&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;最后看到有人说可以把选项改为“自动使用预编译头”，试了一下，果然可以。不过M$为什么不把缺省项设为这个呢，不是故意找麻烦么……&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-3180137652934690665&amp;page=RSS%3a+VC%e7%9a%84%e9%a2%84%e7%bc%96%e8%af%91%e5%a4%b4%e9%97%ae%e9%a2%98&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=royqh.spaces.live.com&amp;amp;GT1=royqh"&gt;</description><comments>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!197.entry#comment</comments><guid isPermaLink="true">http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!197.entry</guid><pubDate>Tue, 20 Dec 2005 08:39:10 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://royqh.spaces.live.com/blog/cns!D3DDE1A75BFBB897!197/comments/feed.rss</wfw:commentRss><wfw:comment>http://royqh.spaces.live.com/Blog/cns!D3DDE1A75BFBB897!197.entry#comment</wfw:comment><dcterms:modified>2005-12-20T08:39:10Z</dcterms:modified></item></channel></rss>