参考网址: 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标签创建对象

  1. <object  classid="clsid:4738A542-7AEB-4CE4-86A7-71081B8CE8DA"id="myAddObj"
  2. name="myAddObj " ></object>

类似于这种标签创建的对象,可以通过js直接访问到myAddObj对象。Classid可以在AddCom.idl文件中查找到,library中的coclass Add对应的id。

  1. library AddComLib
  2. {
  3. importlib("stdole2.tlb");
  4. [
  5. uuid(64EC1270-5626-4FDF-888F-41859FB35E15)
  6. ]
  7. coclassCompReg
  8. {
  9. [default]interface IComponentRegistrar;
  10. };
  11. [
  12. uuid(FE912C18-0CFB-4DCA-99FA-6E4BC4B07594)
  13. ]
  14. dispinterface_IAddEvents
  15. {
  16. properties:
  17. methods:
  18. };
  19. [
  20. uuid(4738A542-7AEB-4CE4-86A7-71081B8CE8DA)
  21. ]
  22. coclass Add
  23. {
  24. [default]interface IAdd;
  25. [default,source] dispinterface_IAddEvents;
  26. };
  27. };

2)  通过new ActiveXObject创建对象

  1. var myAddObj = new ActiveXObject("myAddObj.1");

myAddObj也就是在创建简单对象时填写的ProgID,这个可以在Add.rgs资源文件中查找到。

7.      创建完对象就可以直接调用相应的函数了,如刚才实现的一个result = add(arg1,arg2)方法。

  1. var result = myAddObj.add(1,2);
  2. alert(result);

8.对ActiveX控件标记安全

9.将ActiveX打包签名CAB

C++基于ATL工程编写ActiveX控件步骤的更多相关文章

  1. C#编写ActiveX控件

    用C#编写ActiveX控件 http://www.cnblogs.com/homer/archive/2005/01/04/86473.html http://www.cnblogs.com/hom ...

  2. 用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件

    用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件用C#编写ActiveX控件 开发浏览器控件这是本控件开发完成后的一个简单应用.我们可以利用它以本地文件夹为单位来批量更新服务器的 ...

  3. 用C#编写ActiveX控件

    http://www.cnblogs.com/homer/archive/2005/01/04/86473.html http://www.cnblogs.com/homer/archive/2005 ...

  4. Delphi 编写ActiveX控件(OCX控件)的知识和样例(有详细步骤)

    一.ActiveX应用情况简介: ActiveX控件也就是一般所说的OCX控件,它是 ActiveX技术的一部分.ActiveX是微软公司推出的基于组件对象模型COM的技术,包括对Windows 32 ...

  5. 基于MFC的网页ActiveX控件开发全程实录2(js向ActiveX控件传递参数)

    原文转自 https://blog.csdn.net/qianbin3200896/article/details/81452822 1.ActiveX控件部分(JS到ActiveX控件)继续上一篇博 ...

  6. Qt编写activex控件在网页中运行

    qt能够实现的东西非常多,还可以写activex控件直接在网页中运行.参照qtdemo下的例子即可. 方案一:可执行文件下载:https://pan.baidu.com/s/14ge9ix2Ny0x7 ...

  7. VC++编写ActiveX控件

    ActiveX这门技术是通过生成“*.ocx”文件来实现的.先来了解下OCX文件,在百度百科上面对OCX是这样解释的:“.ocx是ocx控件的扩展名,OCX 是对象类别扩充组件.如果你用过Visual ...

  8. 用ATL和MFC来创建ActiveX控件

    摘要:目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发.MFC代表了创建独立的Windows应用的一种简单.一致的方法:ATL提供了一种框架来实现创建COM客户机和服务器所 ...

  9. 编写在浏览器中不弹出警告的ActiveX控件

    我们在编写ActiveX控件时,如果用在浏览器中,经常都会弹出现在运行的脚本不安全的提示, 如果给客户使用,将会带来极大不便.按照MSDN的介绍通常有两种一种是实现IObjectSafe接口,一种是通 ...

随机推荐

  1. Caffeine缓存的简单介绍

    1.简介 在本文中,我们将了解Caffeine,一个用于Java的高性能缓存库. 缓存和Map之间的一个根本区别是缓存会清理存储的项目. 一个清理策略会决定在某个给定时间哪些对象应该被删除,这个策略直 ...

  2. C语言:自增 自减

    一个整数类型的变量自身加 1 可以这样写: a = a + 1; 或者 a += 1; 不过,C语言还支持另外一种更加简洁的写法,就是: a++; 或者 ++a; 这种写法叫做自加或自增,意思很明确, ...

  3. springMVC-4-处理模型数据

    返回模型数据(Model) index.jsp中 <h1>获取模型数据</h1> <a href="/model/test1">ModelAnd ...

  4. ssm框架下 数据库连接异常 java.sql.SQLException: The server time zone value '???&#250;&#177;&#234;&#215;??&#177;??' is unrecognized or represents more

    1.错误截图 2.修改操作 我是在框架的中连接的数据库,如果在类中把    &换成& 修改前代码 <property value="com.mysql.jdbc.Dri ...

  5. Vulnhub -- Jarbas靶机渗透

    目标:拿到服务器的Shell 信息收集 配置好后用nmap扫描 kali's ip:192.168.241.131 nmap -sP 192.168.241.131/24 一个个扫描 发现192.16 ...

  6. vue+element实现分页--之--前端分页

    效果图: 访问的数据量小,一次返回所有数据,再次利用elementUI-Table 和el-pagination组件进行展示,关键点事数据的筛选 官网的完整案例 <div class=" ...

  7. mongodb使用场景及与mysql区别

    MySQL是关系型数据库. 优势: 在不同的引擎上有不同 的存储方式. 查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高. 开源数据库的份额在不断增加,mysql的份额页在持续增长. 缺 ...

  8. 🔥 LeetCode 热题 HOT 100(31-40)

    75. 颜色分类 思路:将 2 往后放,0 往前放,剩余的1自然就放好了. 使用双指针:left.right 分别指向待插入的 0 和 2 的位置,初始 left 指向数组头,right 指向数组尾部 ...

  9. 单片机学习(二)开发板LED灯的控制

    目录 开发板上LED灯相关的电路图 点灯 LED闪烁 LED流水灯 其他效果 灯光二进制计数器 进阶版流水灯 开发板上LED灯相关的电路图 这是P2相关7个引脚的电路图,在默认情况下它是直接接着VCC ...

  10. Spring学习笔记-DI(依赖注入)

    构造器注入(见前贴) Set注入[重点] 依赖注入:Set注入 依赖:bean对象的创建依赖于容器 注入:bean对象的所有属性由容器来注入 [环境搭建] 复杂类型 // Class Address ...