参考网址: 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. C语言:最小公倍数

    //求最小公倍数 #include <stdio.h> main() { int m,n,i,k,max,min; scanf("%d,%d",&m,& ...

  2. C语言:数组长度的检测方法

    //数组长度的检测方法 #include <stdio.h> int main() { int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5 ...

  3. python with (as)语句

    with语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的"清理"操作,释放资源,比如文件使用后自动关闭.线程中锁的自动获取和释放等. 例1:url = ...

  4. 高性能内存图数据库RedisGraph(一)

    作为一种简单.通用的数据结构,图可以表示数据对象之间的复杂关系.生物信息学.计算机网络和社交媒体等领域中产生的大量数据,往往是相互连接.关系复杂且低结构化的,这类数据对传统数据库而言十分棘手,一个简单 ...

  5. SpringMvc接受请求参数的几种情况演示

    说明: 通常get请求获取的参数是在url后面,而post请求获取的是请求体当中的参数.因此两者在请求方式上会有所不同. 1.直接将接受的参数写在controller对应方法的形参当中(适用于get提 ...

  6. 【每日算法】存在重复元素 III

    题目描述 这是 LeetCode 上的 220. 存在重复元素 III, 难度为 [中等] 给你一个整数数组 nums 和两个整数 k 和 t .请你判断是否存在 两个不同下标 i 和 j,使得 ab ...

  7. CFS靶机

    nmap扫描 nmap -sV -p1-65535 192.168.1.135 thinkphp5.0版本 找到poc进行测试 http://192.168.1.135/index.php?s=ind ...

  8. 论文笔记:(2017NIPS)DeepSets

    目录 摘要 一.引言 二.置换不变性和等变性 2.1 问题定义 2.2 结构 2.3 相关结果 三.Deep Sets 3.1 架构 3.2 其他相关工作 四.应用和实验结果 4.1 设置输入标量响应 ...

  9. Hadoop 3.1.1 - Yarn 服务 - 总览

    YARN 服务 总览 Yarn 服务框架为在 Yarn 原生环境里长时间运行的服务,提供了一流的支持和接口.简言之,它扮演了容器编排系统的角色,统一管理 Yarn 上运行的容器化服务.它同时支持 Do ...

  10. python实现常用五种排序算法

    一.冒泡排序 原理: 比较相邻的元素.如果第一个比第二个大就交换他们两个 每一对相邻元素做同样的工作,直到结尾最后一对 每个元素都重复以上步骤,除了最后一个 第一步: 将乱序中的最大值找出,逐一移到序 ...