[转]C++基于ATL工程编写ActiveX控件
2012-02-14 09:38
232 查看
开发环境:VS2010
开发工程:C++ATL项目
开发目的:创建ActiveX实现js调用
步骤:
1. 创建一个ATL工程
应用程序类型选择动态链接库(DLL),勾选支持COM+1.0,勾选支持部件注册器
2. 选择类视图,添加接口与类
![](http://hi.csdn.net/attachment/201107/14/0_13106035278zXR.gif)
如果没有找到类视图,可以在工具栏中添加上视图
![](http://hi.csdn.net/attachment/201107/14/0_1310603532vG53.gif)
选择工程,右键添加类。选择ATL简单对象。
输入对象信息。
![](http://hi.csdn.net/attachment/201107/14/0_1310603539g37s.gif)
此处的ProgID需要注意,填写之后可在js中通过new ActiveXObject(“你的progID”)创建对象。
![](http://hi.csdn.net/attachment/201107/14/0_13106035459ivO.gif)
勾选支持中的3个选项,我选择的线程模型为单线程,可根据实际需求修改。完成后会发现已经生成了Add.h和Add.c文件。里面有一些红色波浪线提示错误无需管。
3. 依然是类视图中,找到对应的接口添加方法,比如我创建的简单对象名称为Add,这里我们就在IAdd节点上右键添加方法。
添加方法时,需要注意的是out和retval必须为指针类型,否则不让勾选,此处添加三个参数,其中result作为返回值(勾选了retval的参数)。
![](http://hi.csdn.net/attachment/201107/14/0_131060355109z9.gif)
会发现你如果勾选了一个retval后,就不会再让你添加参数了,表示只能有一个返回值。仅仅勾选out的参数,js没有效果,C#等可以使用这种函数的out参数。
4. 找到Add.c文件,在添加完成的函数中实现具体方法。
![](http://hi.csdn.net/attachment/201107/14/0_1310603554D6DD.gif)
5. 编译生成成功后,在工程目录(Debug或者release)下找到AddCom.dll.
使用regsvr32 AddCom.dll命令注册。提示注册成功后,编写一个html代码测试。
6. 两种方式创建对象。
1) 通过object标签创建对象
[html] view plaincopyprint?
<object classid="clsid:4738A542-7AEB-4CE4-86A7-71081B8CE8DA"id="myAddObj"
name="myAddObj " ></object>
2) 通过new ActiveXObject创建对象
[javascript] view plaincopyprint?
var myAddObj = new ActiveXObject("myAddObj.1");
开发工程:C++ATL项目
开发目的:创建ActiveX实现js调用
步骤:
1. 创建一个ATL工程
应用程序类型选择动态链接库(DLL),勾选支持COM+1.0,勾选支持部件注册器
2. 选择类视图,添加接口与类
![](http://hi.csdn.net/attachment/201107/14/0_13106035278zXR.gif)
如果没有找到类视图,可以在工具栏中添加上视图
![](http://hi.csdn.net/attachment/201107/14/0_1310603532vG53.gif)
选择工程,右键添加类。选择ATL简单对象。
输入对象信息。
![](http://hi.csdn.net/attachment/201107/14/0_1310603539g37s.gif)
此处的ProgID需要注意,填写之后可在js中通过new ActiveXObject(“你的progID”)创建对象。
![](http://hi.csdn.net/attachment/201107/14/0_13106035459ivO.gif)
勾选支持中的3个选项,我选择的线程模型为单线程,可根据实际需求修改。完成后会发现已经生成了Add.h和Add.c文件。里面有一些红色波浪线提示错误无需管。
3. 依然是类视图中,找到对应的接口添加方法,比如我创建的简单对象名称为Add,这里我们就在IAdd节点上右键添加方法。
添加方法时,需要注意的是out和retval必须为指针类型,否则不让勾选,此处添加三个参数,其中result作为返回值(勾选了retval的参数)。
![](http://hi.csdn.net/attachment/201107/14/0_131060355109z9.gif)
会发现你如果勾选了一个retval后,就不会再让你添加参数了,表示只能有一个返回值。仅仅勾选out的参数,js没有效果,C#等可以使用这种函数的out参数。
4. 找到Add.c文件,在添加完成的函数中实现具体方法。
![](http://hi.csdn.net/attachment/201107/14/0_1310603554D6DD.gif)
5. 编译生成成功后,在工程目录(Debug或者release)下找到AddCom.dll.
使用regsvr32 AddCom.dll命令注册。提示注册成功后,编写一个html代码测试。
6. 两种方式创建对象。
1) 通过object标签创建对象
[html] view plaincopyprint?
<object classid="clsid:4738A542-7AEB-4CE4-86A7-71081B8CE8DA"id="myAddObj"
name="myAddObj " ></object>
[cpp] view plaincopyprint? library AddComLib { importlib("stdole2.tlb"); [ uuid(64EC1270-5626-4FDF-888F-41859FB35E15) ] coclassCompReg { [default]interface IComponentRegistrar; }; [ uuid(FE912C18-0CFB-4DCA-99FA-6E4BC4B07594) ] dispinterface_IAddEvents { properties: methods: }; [ uuid(4738A542-7AEB-4CE4-86A7-71081B8CE8DA) ] coclass Add { [default]interface IAdd; [default,source] dispinterface_IAddEvents; }; }; library AddComLib { importlib("stdole2.tlb"); [ uuid(64EC1270-5626-4FDF-888F-41859FB35E15) ] coclassCompReg { [default]interface IComponentRegistrar; }; [ uuid(FE912C18-0CFB-4DCA-99FA-6E4BC4B07594) ] dispinterface_IAddEvents { properties: methods: }; [ uuid(4738A542-7AEB-4CE4-86A7-71081B8CE8DA) ] coclass Add { [default]interface IAdd; [default,source] dispinterface_IAddEvents; }; };
2) 通过new ActiveXObject创建对象
[javascript] view plaincopyprint?
var myAddObj = new ActiveXObject("myAddObj.1");
[javascript] view plaincopyprint? var result = myAddObj.add(1,2); alert(result); var result = myAddObj.add(1,2); alert(result);8. 将ActiveX打包CAB待续.....
相关文章推荐
- C++基于ATL工程编写ActiveX控件
- C++基于ATL工程编写安全的ActiveX控件
- C++基于ATL工程编写ActiveX控件步骤
- C++基于ATL工程编写ActiveX控件
- 编写ATL工程实现ActiveX控件调用cryptoAPI接口(三)------------AES对称加密与解密
- 编写ATL工程实现ActiveX控件调用cryptoAPI接口(二)------------信封加密与解密
- 编写ATL工程实现ActiveX控件调用cryptoAPI接口(一)------------签名与验证
- 编写ATL工程实现ActiveX控件调用cryptoAPI接口(一)------------签名与验证
- 编写ATL工程实现ActiveX控件调用cryptoAPI接口(二)------------信封加密与解密
- 编写ATL工程实现ActiveX控件调用cryptoAPI接口(三)------------AES对称加密与解密
- 编写ATL工程实现ActiveX控件调用cryptoAPI接口(四)------------Base64转码
- 编写ATL工程实现ActiveX控件调用cryptoAPI接口(五)------------获取证书转成Base64码
- 编写ATL工程实现ActiveX控件调用cryptoAPI接口(四)------------Base64转码
- 基于Linux编写C++程序
- ATL7.1编写ActiveX控件
- 在C++中使用sqlite的示例(从下载、编译、工程建立、配置、测试代码编写全方位介绍)
- 基于C#的Metro工程如何引用C++的动态库——FIleNotFound解决办法
- 基于Qt5.5.0的sql,C++备忘录软件的编写
- 基于MFC框架的C++游戏开发(二)建立工程、调整窗口
- Horde3D——基于C++编写的3D渲染引擎