ActiveX控件开发、部署、使用(全)

2023-10-28

## 本文基于MFC的ActiveX控件开发,很大程度上和基于ALT的ActiveX控件编写有相同之处 ##

  1. 首先创建基于MFC的ActiveX控件
    这里写图片描述
    OK一路下一步,完成

  2. 添加与外部接口,ClassView-》Lib-》Events-》ADD-》method
    这里写图片描述

  3. 设置接口返回值,并非所有都有效,一般LONG,SHORT,FLOAT有效(实测),字符串BSTR有效,其他需要可以自己测试。
    这里写图片描述

  4. 在Solution Explorer中有个.idl结尾的文件,双击,里面有个uuid,最下面的uuid就是浏览器调用时的classid很重要,记下来
    这里写图片描述

  5. 控件编译后会在debug目录下出现一个ocx文件,这个文件就是我们需要的控件,一般将这个控件放在C:\windows\system32 32系统。c:\windows\wow64 64系统,然后regsvr32 XXX.ocx将这个控件注册,这里需要注意,如果这个控件以后要部署到其他机器,而其他机器为客户机,建议发布release版本,改为MT,使用MFC static lib这样,在客户机不需要导过多dll否则,需要使用depends工具,将ocx需要的dll都导入后发布。

  6. js调用ocx

<html>
<head>
</head>
<script>
function fun(){
  document.getElementById("Control").testDistribute();  //这个为控件内的Events接口
}
window.onload=function(){
  document.getElementById("Control").style.visibility = "hidden";         //设定隐藏
  document.getElementById("Control").style.height = 0;                       //实在不行就设高度为0
}
</script>
<input type="button" id="1" value="dian" onclick="fun()">
</input>
<OBJECT id="Control" width="528" height="528" classid="clsid:39CC2644-4E63-4256-9542-EF7768AC2645">
    <PARAM name="_Version" value="65536">
</OBJECT>
</html>

7.ocx调用js

VC中函数如下:

#include <ATLBASE.H>
extern CComModule _Module; 
#include <ATLCOM.h>

//回调函数--全局变量
CComDispatchDriver m_Func1;

//注册回调函数
void CMFCActiveXControl3::regfun(LPDISPATCH bstrFun) 
{
    m_Func1 = bstrFun;
}
//触发回调函数
void CMFCActiveXControl3::func_calljs() 
{
    VARIANT varArg[1];
    varArg[0].vt = VT_UINT; 
    varArg[0].uintVal = 10;
    m_Func1.InvokeN((DISPID)DISPID_VALUE, varArg, 1);
}

JS函数如下:

function callfun(i)
{
    alert("callback function in js, ret=" + i);
}

function regfun(){
    document.getElementById("Control").regfun(callfun);
}

这里例子也是参考别人写的代码,大体意思就是将JS函数注册到Com,然后控件响应事件后,调用js

8.配置浏览器属性,Internet选项-》安全-》自定义级别,关于ActiveX的不是允许就提示,也不要所有都允许,会降低安全级别,变红,警报。
这里写图片描述
Internet选项-》高级,这里需要改点,如下:
这里写图片描述
9.以上操作如果够细心,应该是可以加载ActiveX控件了,但是我们的ActiveX控件总会出现提示,比如这个东西:
这里写图片描述
这里需要生成安全接口,这里给大家个链接,亲测有效:
http://blog.csdn.net/rankun1/article/details/51735876
10.在这里如果之前的步骤够细心,应该可以使用ActiveX了,但是,做好的ActiveX如何部署在客户端呢,一般来讲,很多人会选择给ActiveX控件打包成cab,然后找个证书认证,这样就可以在浏览器下载,不会安全警告,但是这个证书比较难弄,原来是sha1算法加密,现在普遍都sha2,而且免费的证书似乎已经无效了,一般想使用,都去CA沃通去买,大概几千一年,大体方法就是将ocx和所需要的dll打包,配一个inf文件,再标签有个codebase属性,指定cab包的路径就会自动寻找ocx,像很多网银那样,下载自动注册。这种做法比较适合互联网使用,但如果就是少量的客户端呢,没有很大的客户群体,可以考虑将ocx打包成exe,配合bat脚本进行安装,那只需要走个链接就好了。
11.调试控件,控件调试起来比较麻烦,我一般是将需要完成的功能用MFC写,写完调试后再向控件中移,其中会有些需要改动的地方,在代码缺陷较少的情况下再用控件调试,调试方法如下:
这里写图片描述
Debug-》Attach to Process-》
这里写图片描述
寻找iexplore.exe没有开始的一栏,点击attach,这样就进入调试模式,可以在里面下断点,(这个ie里得加载了控件,才能下断点)
这里写图片描述
12.在实际开发中,控件调试起来很麻烦,还需要对MFC框架较熟悉,对C++原理较熟悉,否则,在编写控件时,时常会因为释放资源,线程关闭,socket关闭,控件析构这些琐碎的小问题所困扰,调试起来还麻烦。我开发的环境是vs2013 ie11 网上有很多例子,但都很琐碎,希望这个文章能捋顺下思路,虽然这个东西已经几乎没人用了。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ActiveX控件开发、部署、使用(全) 的相关文章

  • 如何将 unicode 字符变成小写字母

    我在 VC MFC 中将 unicode 字符转换为小写字母时遇到问题 我在 CString 变量中有 unicode 字符 所以 使用英语 MakeLower 工作正常 我得到小写字母 但它无法将 unicode 字符转换为小写 我确实尝
  • 从一组 ActiveX 选项按钮返回索引值

    首先我要声明我是一名医学生 而不是程序员 我编写了一个电子表格 可以作为包含 50 个问题的考试 每个问题都有 15 个多项选择答案 我使用 ActiveX 选项按钮将其分组到每个问题编号 我使用 Activex 而不是表单选项按钮 因为我
  • CloseWindow和WM_CLOSE有什么关系

    我现在有点困惑 是吗 WM CLOSE http msdn microsoft com en us library windows desktop ms632617 28v vs 85 29 aspx and CloseWindow htt
  • ActiveX 控件是否被禁用?

    我的 Excel 工作表使用 ActiveX 复选框来控制某些活动 今天他们开始报错 一位运行更高版本 Excel 的同事向我发出了警报 但它仍然可以在我的计算机上运行 我注意到有 Windows 更新 所以我进行了更新 现在它不再在我的计
  • MFC:如何减少OnInitialUpdate()滚动的时间成本?

    我需要打印多行数据 每行都可以进行文本换行 因此高度会有所不同 要进行滚动 我需要导出总高度 由于每条线可能有不同的高度 我只能遍历每条线来累加高度 如下所示 void CMyScrollView OnInitialUpdate for a
  • 将简单的 MFC CView/CDocument/CSingleDocTemplate 应用程序转换为 ActiveX 控件

    我有一个相当简单的 MFC 应用程序 它只定义了自己的子类CDocument CView and CFrameWnd并通过使用它们CSingleDocTemplate在视图的树中显示文档的只读内容 都是非常标准的MFC MVC 我现在需要转
  • VBA 中运行时错误 429,但类已注册

    我正在尝试重新创建一个程序 该程序使用 JavaScript 打开与 PLC 的连接 然后在网页上显示各种信息 由于各种原因 我宁愿将其以 MS Access 的形式保存 并且一直在努力寻找合适的 dll 来使用 Jet32X dll 如果
  • 跨平台 Windows / OS X 开发,具有大量现有代码库

    对于使用 MFC 和 WinAPI 用 C 编写的复杂应用程序 有大量现有代码库 需要将其移植到 Mac OS X 理想的解决方案是在不同平台之间拥有尽可能多的通用代码 尤其是诸如业务之类的代码逻辑 GUI 可能会有所不同 具体取决于跨平台
  • MFC中如何将BYTE数组转换为CString?

    如何在 MFC 中将 BYTE 数组转换为 CString 试试这个 例如 如果 x 是你的字节数组 那么 BYTE x 5 x 0 A x 1 0 x 2 B x 3 C x 4 0 CString str LPCSTR x sizeof
  • 如何停止对辅助隐式加载 DLL 的 DLL 劫持

    例如 COMDLG32 DLL 隐式链接到以下系统 DLL 以及其他 xmllite dll dll srvcli dll wkscli dll 链接信息库 netutils dll 微星 dll 由于这些是由操作系统隐式加载的 而不是使用
  • Ajax 调用在 IE 中不起作用,除非您修改安全设置

    IE 有时很糟糕 直到 IE 10 IE 才提供对 XMLHttpRequest 对象的支持 相反 您必须使用 XActiveXObject 对象来运行 AJAX 调用 JQuery 默认启动该对象 并在三元函数中维护它 如果它存在 本质上
  • 获取正在运行的程序的属性

    我想开发一个程序 其 ID 是一张牌 因为它在另一个正在运行的程序 例如扑克或红心游戏或其他程序 中播放 我首先尝试获取有关已运行的游戏程序的所需信息 但我从一开始就遇到了问题 我正在运行 MSVC 2013 并开发 MFC 应用程序 现在
  • 将 ActiveX Com 组件与 Node.js 一起使用。是否可以

    有没有办法将任何ActiveX com组件与nodejs一起使用 实际上 我永远不需要这个 但我在 Windows 上运行 nodejs 并尝试发送 ping 请求而不分叉新进程 Windows 不存在这样的模块 由于存在一些 Active
  • 如何使用 java/vb 脚本调用自定义 ActiveX dll 中的方法

    我使用 VB6 创建了一个 ActiveX dll 并使用打包和部署向导将其打包 生成了一个 cab 文件和一个演示 HTML 页面 此 ActiveX dll 包含一个 simgle 方法 该方法返回字符串且不接受任何参数 我遇到的麻烦是
  • 如何检查 ActiveX dll 是否已注册?

    我有一个正在注册多个 dll 的安装程序 需要知道这是否成功 这似乎对我有用 http www nirsoft net utils registered dll view html http www nirsoft net utils re
  • 具有键唯一性和按位置排序的 MFC 字典集合

    看着表上http msdn microsoft com en us library y1z022s1 28v vs 80 29 aspx core collection shape features http msdn microsoft
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 有没有办法将消息从 C#.NET 程序集(ActiveX)发送到 VB6 应用程序?

    本问答参考并可用于以下用途 目的 通过ActiveX dll从IE浏览器发送消息到vb6应用程序 从 ActiveX dll 向 vb6 应用程序发送消息 从 C net dll 发送消息到 vb6 应用程序 我读过了本文 http www
  • 如何防止在 ActiveX 方法调用期间重新进入 WPF 事件处理程序?

    我们从 WPF 和 STA 应用程序中调用 ActiveX 组件上的方法 此调用是通过以下方式后期绑定执行的 res ocx GetType InvokeMember methodName flags null ocx args 其中 oc
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz

随机推荐

  • Java锁机制

    Java锁主要是为了解决线程安全问题 当多个线程共享同一个变量时可能会出现同时修改变量的情况 这样会导致最终计算结果错误 未解决该问题 Java提供了各种锁来确保数据能够被正常修改和访问 最常用的比如synchronized 一 互斥同步
  • python计算机视觉学习第三章——图像到图像的映射

    目录 引言 一 单应性变换 1 1 直接线性变换算法 1 2 仿射变换 二 图像扭曲 2 1 图像中的图像 2 2 分段仿射扭曲 2 2 图像配准 三 创建全景图 3 1 RANSAC 随机一致性采样 3 2 拼接图像 四 总结 引言 本章
  • [4G&5G专题-119]:5G培训应用篇-4-5G典型行业应用的解决方案(车联网、智慧医疗、智能教育、智能电网)

    目录 前言 前言 1 总目录 前言 2 本章 第1章 5G行业应用介绍 第2章 车联网解决方案 2 1 车联网概述 2 2 车联网需求分析 2 3 车联网解决方案 第3章 智慧医疗解决方案 第4章 智能教育解决方案 第5章 智能电网解决方案
  • Mybatis配置多数据源

    前言 Spring Boot项目使用Mybatis 既要从上游系统同步数据 又要操作本系统的数据库 所以需要引入双数据源 配置Mybatis 步骤 一 配置双数据源 连接数据库 1 禁用Spring Boot数据源的自动装配 在启动类 Sp
  • 请求调页存储管理方式的模拟 含详细代码和实验结果截图

    请求调页存储管理方式的模拟 实验目的 通过对页面 页表 地址转换和页面置换过程的模拟 加深对请求调页系统的原理和实现过程的理解 实验内容 假设每个页面中可存放10条指令 分配给一作业的内存块数为4 用C语言模拟一作业的执行过程 该作业共有3
  • 为什么Hadoop集群中机器台数多反而执行速度慢?

    这里我对这个现象给出解释 由于水平有限 发现错误 请及时留言 或站内和我联系 这里假设集群中有slave1 slave2 slave3三个节点 其中slave3工作效率低 一共有6个任务 需要去做 slave1和slave2执行一个任务是1
  • 104个精选计算机毕业设计项目,助你制作出色的程序,一定要试试

    对于即将面临毕业设计的计算机专业的同学们 如何选题和完成毕设项目成为一个重要而又棘手的问题 今天给大四的同学分享毕业设计项目 希望对正在为毕业设计发愁的小伙伴有帮助 一 成品列表 以下所有springboot框架项目的源码博主已经打包好上传
  • rpmbuild制作包的详细过程

    https www cnblogs com schangech p 5641108 html https www ibm com developerworks cn linux l rpm 一 目录结构生成 1 工具安装rpmdevtool
  • STM32之中断和事件

    中断和事件 什么是中断 当CPU正在执行程序时 由于发生了某种事件 要求CPU暂时中断当前的程序执行 转而去处理这个随机事件 处理完以后 再回到原来被中断的地方 继续原来的程序执行 这样的过程称为中断 什么是事件 当检测到某一个动作的触发
  • 内网 centos7 离线安装rpm包的三种方法

    一 使用 downloadonly参数 此种方法的优点是下载的rpm包可以下载至同一目录中 一 互联网电脑下载rpm包 1 查看互联网电脑是否支持 只下载不安装 功能 执行yum帮助命令 yum help 如果列表中出现 downloado
  • 文件操作之文件包含全解(31)

    文件包含的作用就是将这个文件包含进去之后 会调用指定文件的代码 先将文件包含才能执行里面的一些相关代码 比如所想进行文件的链接 数据库的查询 就可以先包含一个数据库的配置文件 再去链接的话就享有配置文件的一些配置信息 就不需要在进行相关的操
  • stegsolve图片隐写解析器的使用

    layout post title ctf 隐写图片解析器 stegsolve的使用 categories ctf tags stegsolve CTF隐写术 隐写图片解析神器 stegsolve stegsolve下载地址 http ww
  • 静态测试和动态测试相关知识点

    目 录 知识总结 5 第一章 5 第二章软件测试基础 5 第三章基于生命周期的软件测试 6 第四章软件测试的分类 6 第五章软件缺陷管理 6 第六章软件测试过程及其管理 7 静态测试 7 1
  • ubunt 上进行c++ cuda编程

    目录 概述 cmake代码 头文件代码 头文件对应的cuda代码实现 c 的代码 运行结果 参考资料 概述 首先先通过一个简单的demo来演示cuda编程是怎么进行的 cmake代码 cmake minimum required VERSI
  • 替换docker容器中的文件

    bin bash 宣告文件内的语法使用bash语法 于是当程序执行时 加载bash的相关环境配置文件 在shell脚本中 倒引号 括起来的表示要执行的命令 dirname 0 获取当前shell程序的路径 cd dirname 0 进入当前
  • ES6中const的使用

    const声明一个只读的常量 一旦声明 常量的值就不能改变 且const一旦声明变量 就必须立即初始化 不能留到以后赋值 const的作用域与let命令相同 只在声明所在的块级作用域内有效 const命令声明的常量也是不提升 同样存在暂时性
  • 目标检测:划分数据集,生成ImageSets\Main下的txt文档

    coding utf 8 Time 2020 6 1 Author WangKaiNing File xml2voc py import os import random 可能需要修改的地方 g root path D AAAAA bigd
  • Linux报错:tar: Error Is Not Recoverable: Exiting Now

    Linux操作系统下 下载完成xx tar gz文件然后执行tar zxvf xx tar gz 执行出现如下错误 xxx tar gz 归档文件中异常的 EOF tar 归档文件中异常的 EOF tar Error is not reco
  • 「ML 实践篇」分类系统:图片数字识别

    目的 使用 MNIST 数据集 建立数字图像识别模型 识别任意图像中的数字 文章目录 1 数据准备 MNIST 2 二元分类器 SGD 3 性能测试 1 交叉验证 2 混淆矩阵 3 查准率与查全率 4 P R 曲线 5 ROC 曲线 6 R
  • ActiveX控件开发、部署、使用(全)

    本文基于MFC的ActiveX控件开发 很大程度上和基于ALT的ActiveX控件编写有相同之处 首先创建基于MFC的ActiveX控件 OK一路下一步 完成 添加与外部接口 ClassView Lib Events ADD method