C++基于ATL工程编写ActiveX控件步骤
2021/6/22 9:27:03
本文主要是介绍C++基于ATL工程编写ActiveX控件步骤,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考网址: https://blog.csdn.net/whui19890911/article/details/8896554
开发环境:VS2010
开发工程:C++ATL项目
开发目的:创建ActiveX实现js调用
步骤:
1. 创建一个ATL工程
应用程序类型选择动态链接库(DLL),勾选支持COM+1.0,勾选支持部件注册器
2. 选择类视图,添加接口与类
如果没有找到类视图,可以在工具栏中添加上视图
选择工程,右键添加类。选择ATL简单对象。
输入对象信息。
此处的ProgID需要注意,填写之后可在js中通过new ActiveXObject(“你的progID”)创建对象。
勾选支持中的3个选项,我选择的线程模型为单线程,可根据实际需求修改。完成后会发现已经生成了Add.h和Add.c文件。里面有一些红色波浪线提示错误无需管。
3. 依然是类视图中,找到对应的接口添加方法,比如我创建的简单对象名称为Add,这里我们就在IAdd节点上右键添加方法。
添加方法时,需要注意的是out和retval必须为指针类型,否则不让勾选,此处添加三个参数,其中result作为返回值(勾选了retval的参数)。
会发现你如果勾选了一个retval后,就不会再让你添加参数了,表示只能有一个返回值。仅仅勾选out的参数,js没有效果,C#等可以使用这种函数的out参数。
4. 找到Add.c文件,在添加完成的函数中实现具体方法。
5. 编译生成成功后,在工程目录(Debug或者release)下找到AddCom.dll.
使用regsvr32 AddCom.dll命令注册。提示注册成功后,编写一个html代码测试。
6. 两种方式创建对象。
1) 通过object标签创建对象
[html] view plain copy- <object classid="clsid:4738A542-7AEB-4CE4-86A7-71081B8CE8DA"id="myAddObj"
- name="myAddObj " ></object>
类似于这种标签创建的对象,可以通过js直接访问到myAddObj对象。Classid可以在AddCom.idl文件中查找到,library中的coclass Add对应的id。
[cpp] view plain copy- 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 plain copy
- var myAddObj = new ActiveXObject("myAddObj.1");
myAddObj也就是在创建简单对象时填写的ProgID,这个可以在Add.rgs资源文件中查找到。
7. 创建完对象就可以直接调用相应的函数了,如刚才实现的一个result = add(arg1,arg2)方法。
[javascript] view plain copy- var result = myAddObj.add(1,2);
- alert(result);
8.对ActiveX控件标记安全
9.将ActiveX打包签名CAB
这篇关于C++基于ATL工程编写ActiveX控件步骤的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享