使用VC2008中ATL开发浏览器控件

本文详细介绍了如何使用Visual Studio 2008中的ATL来开发一个浏览器控件,从创建ATL项目、添加控件到实现脚本响应事件,再到控件的自注册、安全标记以及网络部署,提供了完整步骤和关键注意事项。

使用VC2008中ATL开发浏览器控件

 

2011.03.02

freecnjet@gmail.com

 

 

介绍

本文将介绍使用VC2008中的ATL开发一个用于网络部署的cab控件包的过程。

 

 

建立ATL项目

打开VS2008,建立一个ATL项目,如下图:

 

考虑到简介性,选择了"Allow merging of proxy/stub code"

 

添加ATL控件

(建议先编译一下真个project,保证编译成功并顺利注册了控件)

之后添加一个ATL的控件,注意正确的对象类型。

右键选择项目“Add”->"Add Class"

 

一定要注意选择“ATL控件”,否则事件支持等可能会相对麻烦些,需要自己手动写些接口代码。选择Add后填写必要的控件名称等,进入选项界面:

这里需要注意:如果控件会返回给js/vbs脚本一些消息事件的话,必须选择“Connection points”添加连接点支持。否则需要自己手动在idl中添加连接点接口定义等信息;另外注意"Control type:"的选择,如果是运行时不可见控件或者简单的功能控件等,如果需要返回给js/vbs一些消息事件的话,必须实现IProvideClassInfo2和IProvideClassInfo,此时最好选择Standard control并在后面选择实现,否则的话可以使用Minimal control。

"Next>"出现需要实现的接口对话框,可以根据需要选择,如果返回脚本事件的,至少要实现IProvideClassInfo2接口,如下:

至此,一个ATL控件就创建完成了。建议编译下项目,保证链接成功并正确注册控件。

添加控件属性和方法

在“Class view”中添加控件支持的属性和方法。

例如:

具体可以根据需要操作,这里不详述细节。建议编译下保证正确性。

 

添加脚本响应事件

添加事件函数的方法类似于为控件添加函数,不过针对的接口为XXXLib下的_IXXXEvent,如下:

如果出现HTML网页中事件响应不成功,必须保证上面提到一些设置正确,可以手动检查下必要的接口是否实现。

这之后就可以在实现类CXXXX上添加connection point来方便控件内向外发送事件了。具体如下图:

注意:需要一定不要错误选择"Implement Interface"并实现事件接口;

之后控件实现类中就可以调用Fire_XXX来发送事件调用了。

 

至此,控件就正确实现了,可以使用项目自动产生的.htm文件测试控件的各个接口是否正常工作。

 

另外:所有的Fire_xxx函数只能在窗口线程中执行,控件窗口未初始化时似乎调用无效,例如FinalConstruct和FinalRelease等函数中。

 

控件的自注册和安全标记

如果要实现控件可以自注册必须在资源文件中添加

 

        BLOCK "040904e4"

        BEGIN

             ...

 

             VALUE "OLESelfRegister", "/0"

             ...

       END

 

如果要标记控件的安全性,需要再控件实现文件中添加父类

class ATL_NO_VTABLE CXXXXXX :

    ...

    public IObjectSafetyImpl<CFileUploader,           INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>,

    ...

 

在BEGIN_COM_MAP(CXXXXX)部分插入实现:

BEGIN_COM_MAP(CXXXXX)

   ...

   COM_INTERFACE_ENTRY_IID(IID_IObjectSafety, IObjectSafety)

   ...

END_COM_MAP()

 

封装为cab包及网络部署

由于一般情况下控件会包含其它相关资源项,如附加依赖的dll或配置文件、资源文件等。所以更多的控件以cab包形式发布。

cab包需要一个.inf说明包的信息,一个示例如下:

 

把这个包和相关的控件及其它文件等放到一个目录下,在命令行下使用makecab命令进行打包,之前需要准备一个.ddf文件说明需要哪些文件打包

 

 

之后调用makecab /F xxx.ddf,即可获得一个用于发布的cab文件。

使用方法为设置codebae="<cab file url>[#version=1.0.0.1]"

 

结论

由于ATL的框架,极大地方便了控件的编程,但需要熟悉基本的COM理论,并注意框架中添加代码的步骤,否则很容易出现莫名的错误。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值