tp钱包官网网址|ocx

作者: tp钱包官网网址
2024-03-07 20:17:07

ocx_百度百科

百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心收藏查看我的收藏0有用+10ocx播报讨论上传视频对象类别扩充组件OCX 是对象类别扩充组件(Object Linking and Embedding (OLE) Control Extension);是可执行的文件的一种,但不可直接被执行; 是 ocx 控件的扩展名,与 .exe、.dll 同属于PE文件。如果你用过 Visual Basic 或者 Delphi 一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如 EditBox,Grid,ImageBox,Timer 等等。每个控件都有自己的事件、方法和属性。使用了控件的编程非常容易。在程序的设计阶段可以设置一些属性,如大小,位置,标题(caption)等等,在程序运行阶段,可以更改这些属性,还可以针对不同的事件,调用不同的方法来实现对该控件的控制。控件就好像一块块的积木,程序要做的事只是将这些积木搭起来。控件的最大好处是可以重复使用,甚至可以在不同的编程语言之间使用,例如,你可以在 VB 中嵌入用 VC 开发的控件。外文名Object Linking and Embedding (OLE) Control eXtension别    名Object Linking and Embedding Control eXtension平    台ocx 控件缩    写ocx目录1详细信息2注册方式3可能问题详细信息播报编辑控件的本质是微软公司的对象链接和嵌入(OLE)标准。由于它充分利用了面向对象的优点,使得程序效率得到了很大的提高,从而得到了广泛的应用。国外有很多公司就是专门制作各种各样控件的。控件的最早形式是以.VBX的格式出现的,后来变成了.OCX。由于Internet的广泛流行,微软公司推出了ActiveX技术,就是从OLE发展起来的,加入了WWW上的功能。所以最流行的是ActiveX控件。ActiveX控件.ActiveX控件是可重用的软件组件。使用它可以很快地在网络应用程序、桌面应用程序、以及开发工具中加入特殊的功能。ActiveX控件的使用者可以无需知道这些组件是如何开发的,便可以完成网页或应用程序的设计。对象链接和嵌入用户控件(OCX)是一种可以由在微软的Windows系统中运行的应用软件创建使用的特殊用途的程序。OCX提供操作滚动条移动和视窗恢复尺寸的功能。如果你有Windows系统,你会发现在你的Windows地址录里有大量OCX文件名后缀的文件。 对象链接和嵌入(OLE)被设计来支持混合文档(包含多种资料类型,比如文本、绘画图像、声音、动画)。Windows桌面就是一个混合文档的范例,微软使用OLE来建立的。OLE和组件对象模型(COM继OLE后的更常用的概念)支持“即插即用”程序的发展,“即插即用”程序在系统中可以用任何语言写入并可以由任何应用程序动态地使用。这些程序被认为是他们在其上运行的container的组件和应用程序。这种基于组件的近似应用程序的发展缩减了程序调试时间并改善了程序的性能和品质。Windows应用发展程序(比如powerbuilder和Microsoft Access)具有OCX的优势。注册方式播报编辑ocx控件的安装方式有很多种,这里介绍最简单的一种。步骤:1.进入开始,点击运行。2.在出现的框中键入regsvr32 C:\xxxx.ocx 。(XXXX为控件名, C:\为目录)(regsvr32E:\控件的制作\myOcxTest\Debug\myOcxTest.ocx)3.点击确认后等待出现提醒注册成功即可。oca 文件Oca文件不是控件,其中保存Ocx控件的属性ocx的注销1.进入开始,点击运行。2.在出现的框中键入regsvr32 /u C:\xxxx.ocx 。(XXXX为控件名, C:\为目录)(regsvr32 /u E:\控件的制作\myOcxTest\Debug\myOcxTest.ocx)3.点击确认后等待出现提醒注销成功即可。可能问题播报编辑同一个OCX的多个控件在同一窗体上会出现可能的问题,主要原因是不能有全局变量(或共享数据) ,应该尽量定义成类的成员变量,全局变量在同一个进程中要被共享的。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

ocx入门浅析-CSDN博客

>

ocx入门浅析-CSDN博客

ocx入门浅析

最新推荐文章于 2023-12-07 15:02:34 发布

kevin--你不知道的事

最新推荐文章于 2023-12-07 15:02:34 发布

阅读量4.1w

收藏

71

点赞数

12

文章标签:

ocx

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/wangkui1331/article/details/53763990

版权

1.exe,ocx,dll的区别

分析:exe是一个可执行程序,而ocx看做是一个窗口上的控件(控件即ocx,如button),dll是将函数、变量、类封装在一起的库

ocx的形式如下:

图中的各个都是ocx控件(我是这样认为的),只不过MFC内置了一些控件,但是如果是自己写的ocx控件,程序运行时必须将生成的ocx控件拷到可执行目录下

2.ocx特点(根据普通的button可知)

(1)ocx是可视化窗口,一个ocx有一个ID,可以通过ID来建立一个对应的类,调用其中函数(如果看不到,那么肯定隐藏了)

(2)可以响应单击、双击等鼠标事件

(3)含有对应的属性

3.创建一个ocx程序(如何让ocx含有上面这些属性呢)

(1)利用VS2010创建一个MFC ActiveX Control工程,名为myocx

其中myocx.h中InitInstance是入口,.cpp中含有ocx注册、反注册的函数

myocxCtrl.h中CmyocxCtrl是ocx的可视化窗口类,父类是COleControl,因为是窗口,所以可以响应OnCreate,Onsize等消息,含有消息映射,调度映射,事件映射

myocxPropPage.h是ocx的属性,就像按钮button类含有属性一样

myocx.idl是对外接口,据说CmyocxCtrl类是继承它的,所有对外接口都在myocx.idl这里声明,在CmyocxCtrl类中实现

myocx.def,ocx是一种特殊的dll,所以同样有def文件,内容如下

; myocx.def : Declares the module parameters.

EXPORTS

DllCanUnloadNow PRIVATE

DllGetClassObject PRIVATE

DllRegisterServer PRIVATE

DllUnregisterServer PRIVATE其中的PRIVATE的意思是对ocx私有,即这些函数名不会加到生成的库文件中(编译ocx发现除了生成ocx,还有一个lib文件)

(2)消息映射,调度映射,事件映射

>1含义

     消息映射:即响应操作系统的消息

     调度映射:可以在外部调用的接口函数,通俗的将就是一个控件可以调用它内部的函数,如CButton btn;btn.函数名();

     事件映射:单击、双击等事件由ocx传给它的容器进行响应,如按钮的一些事件,触发后可以在它的父窗口中进行响应处理

>2添加调度映射

在myocx的idl中对应的调度映射下添加:

[id(1)] void Hello();

在myocx.h中添加:

afx_msg void Hello();

//添加调度枚举类型

enum {

//调度ID,从1开始

dispidHello = 1L,

//事件ID,从1开始

};

在myocx.cpp中添加:

void CmyocxCtrl::Hello()

{

AfxMessageBox(_T("Hello world"));

}

编译并生成ocx,默认编译生成的ocx也注册好了

创建一个基于对话框的MFC工程,名为useocx,在对话框窗口右击插入ActiveX 控件,快速输入生成的ocx的前几个字母找到ocx,添加进去

右键ocx,选择添加变量,变量名设为m_myocx,设置好后,便会生成对应的ocx类

可以看到ocx类中已经自动含有:

void Hello()

{

InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);

}

这个时候就可以利用m_myocx调用里面的Hello函数了

附:也可以在下面这个位置右键选择添加添加函数实现

>3添加事件映射

在下图上右键

选择添加事件,选择Click,确认,效果是在idl文件事件下面多出下面一行:

[id(DISPID_CLICK)] void Click(void);

在myocx.cpp中中间多出:

BEGIN_EVENT_MAP(CmyocxCtrl, COleControl)

EVENT_STOCK_CLICK()

END_EVENT_MAP()

效果是在useocx工程的资源对话框文件中,右键添加的Ocx控件,查看属性,发现事件中

多出了Click属性,此时可以添加函数,运行useocx工程时鼠标点击控件就会触发这个函数

如果添加自定义的事件映射,则在myocxi.idl中事件映射下添加:

[id(1)] void MyDrag(void);

在myocxCtrl.h中添加

enum {

//调度映射ID

dispidHelloClick = 1L,

//事件映射ID

eventidMyDrag = 1L,

};

protected:

void MyDrag(void)

{

FireEvent(eventidMyDrag, EVENT_PARAM(VTS_NONE));

}

同样查看useocx工程资源对话框文件控件属性:

多出MyDrag属性,此时可以再外面写响应函数,具体触发则需要根据需要在ocx内部调用就可以触发

这里注意ocx事件触发都是在ocx内部触发,外部进行响应处理的,如button类,点击或双击都是在按钮本身触发,最后由它的父窗口进行响应处理,自定义的事件也是要在内部进行触发

注意:InvokeHelper和FireEvent这两个函数中的表示传入形参的参数含有多个时,通过空格进行隔开(一个函数形参可以有很多个,但返回值只有一个)

总结:

1.ocx有三种映射,但idl中对外提供的只有调度映射和事件映射

2.(1)ocx的类与ocx是通过idl文件中最后的类的ID建立联系的

idl中:

// Class information for CmyocxCtrl

[

uuid(EF2CFD6B-E121-47E3-BD63-5F5DD51DCCFF)

]

在ocx类(class CMyocxctrl_use : public CWnd)中

CLSID const& GetClsid()

{

static CLSID const clsid

= { 0xEF2CFD6B, 0xE121, 0x47E3, { 0xBD, 0x63, 0x5F, 0x5D, 0xD5, 0x1D, 0xCC, 0xFF } };

return clsid;

}

(2)调度映射是通过Idl中调度函数前的ID建立联系的

在idl中:

[id(1)] void Hello();

在在ocx类(class CMyocxctrl_use : public CWnd)中

void Hello()

{

InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);

}

(3)事件映射是在内部进行触发,也就是含有fireEvent的那个函数是在ocx内部调用作为触发方式,响应在外面实现

3.ocx作为控件在MFC中使用时,此时该控件与它的容器是父窗口与子窗口关系,普通控件与父窗口之间的函数调用方式它也同样适用

4ocx属性

与myocxPropPage.h中CmyocxPropPage类有关,对应的效果:

5.ocx调试

(1)在exe中进行调试

按照上面方法在useocx工程中添加好ocx后,在myocx工程中设置以下属性:

就可以调试了

(2)在IE中调试

首先编写一个html文件,后缀名为htm,添加如下内容:

HTML>

Test ActiveX

注意其中ID就是idl中类的ID,在myocx中设置如下属性:

第一个是IE的路径,第二个是IE地址栏中的数据,根据需要可填可不填,有的是IP地址,有的是htm,这样就可以了

说明:有的IE不是单进程的,可以通过附加到进程进行调试,也可以将IE设置成单进程的

我这里通过IE调试的时候打断点,调试运行鼠标不可用,也不知道什么原因,暂未解决

6.ocx程序发布

OCX不能单独运行,发布时必须拷到对应的可执行的程序中,一起发布

优惠劵

kevin--你不知道的事

关注

关注

12

点赞

71

收藏

觉得还不错?

一键收藏

知道了

3

评论

ocx入门浅析

1.exe,ocx,dll的区别分析:exe是一个可执行程序,而ocx看做是一个窗口上的控件(控件即ocx,如button),dll是将函数、变量、类封装在一起的库ocx的形式如下:图中的各个都是ocx控件(我是这样认为的),只不过MFC内置了一些控件,但是如果是自己写的ocx控件,程序运行时必须将生成的ocx控件拷到可执行目录下2.ocx特点(根据普通的butto

复制链接

扫一扫

简单的Web调用OCX控件

05-27

本程序简单描述ocx在网页中的调用方式,适合初步接触网页的设计人员对web调用ocx方式的理解。

c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目

热门推荐

烂笔头的专栏

01-30

7万+

1.ActiveX的基本概念

         ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体等。。。

         ActiveX控件的后缀名是OCX或者DLL。一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或exe解压成OCX和动

3 条评论

您还未登录,请先

登录

后发表或查看评论

COM组件、ActiveX、OCX区别

07-03

1万+

COM 组件就是一组接口的集合,实现了 IDispath 接口的 COM 组件叫做 自动化组件。在自动化组件的基础上,在实现规定的接口就称为 ActiveX 组件,Ocx 是 Activex 的文件载体

一般来讲 ,一个 ActiveX 对应一个 Ocx 文件, 如果愿意, 一个Ocx 文件也可以包含多个 ActiveX  控件

什么是OXC(光交叉连接)?

最新发布

2301_81253485的博客

12-07

179

ROADM是全光网络的关键技术之一,其主要目的是在线路光交换的基础上进一步实现节点光交换。ROADM发展为CDC-F ROADM,基本上实现了极强的光交换能力。然而,它仍然不是全光网络的最终解决方案。们知道光网络是现代通信网络的基石。如果没有强大的光网络的支持,包括8K视频、VR/AR、智能工厂、智能城市、智能交通等大带宽、低延迟的应用场景都无法完美实现。5G和F5G也不会工作。ROADM有一些问题。最大的问题之一是光纤连接的复杂性。1.什么是OXC(光交叉连接)?2.为什么我们需要OXC?

ocx自动注册

02-01

用于ocx的自动注册。

将ocx控件包解压后,放到合适的目录,把这个工具拷贝到这个目录,执行即可完成注册,不用再输入windows的注册命令regsvr32.exe。

适用于监控类视频控件,用户层面的使用。

因为最终用户通常不会输入复杂命令。

我自己是将这个工具集成到我自己的软件中了,方面用户使用。

实际工作中,经常发现用户无法完成IE中的某些视频控件注册,我都是使用这个工具来解决的。懒得输命令了。

Ocx函数查看器

09-16

Ocx函数查看器,可以打开OCX文件查看其内部的属性,方法等等。

便于开发人员更好的使用OCX控件。

OCX控件入门ActiveX控件入门详解

02-07

OCX控件入门0基础ActiveX控件入门详解

OCX 入门

gongluck93的博客

03-21

1万+

OCX入门:http://blog.csdn.net/hkcsdn/article/details/52908748

前言

ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。

  ActiveX控件是一种实现了一系列特定接口而使其在使用和外观上更象一个控件的COM组件。ActiveX控件这种技术涉及到了几乎所有的C

ocx开发经验,ActiveX开发快速入门

xiaoxiaoyu85的专栏

12-12

7862

1. ocx下载解压的目标位置,由注册表项指定

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ActiveX Cache

默认为C:\WINDOWS\Downloaded Program Files

inf文件也解压到该目录

下载的ocx在资源管理器中不可见,使用dir命令可见。可以使用copy

VS2010下ocx开发三部曲

dong123ohyes的专栏

09-12

1423

一、用C++ MFC ActiveX开发简单的ocx控件

本文给出了在Visual Studio 2010开发环境下使用向导工具生成一个简单ocx控件的示例。

首先以管理员身份运行Visual Studio 2010,这样做的目的是在将来编译控件时VS2010能自动注册ocx控件,不会出现权限不足导致失败的错误。如果不使用管理员身份运行VS 2010,将来就需要使用regsvr32命令手动注册创建的ocx控件(注意执行regsvr32命令时也要使用管理员身份,即以管理员身份执行cmd.exe,然..

什么是OCX控件?注册它都有哪些作用?

limuzi13的专栏

09-16

9068

当标准控件不能完全满足用户需求时,用户可以编写自己的控件插入到编程工具中使用,编写的控件就是OCX。现在网页中也可以嵌入OCX,并称其为ActiveX控件。目前可以编写OCX的工具包括VB、VC、Delphi。易语言也即将支持OCX。 OCX是一种COM控件,OCX通常所说ActiveX控件,COM的原理是接口与实现分离,为了标识每个OCX的接口,必须在注册表里注册该控件的 GUID码。这样使用

chrome史上最完整调用ocx完整解决方案

03-22

关键字 chrome,ocx,控件,activeX。用于解决chrome调用ocx控件的一个demo。

OCX控件查看工具

12-06

查看OCX控件的属性,函数等,完美支持OCX控件的二次开发。

ocx信息查看工具

10-29

一个查看ocx的CLSID、函数名称查看工具。这个工具是我平常使用第三方ocx控件最常用的工具之一。

解决ocx控件在ie中加载不上的问题

08-17

这个工具有两个版本html版和bat+reg版

html版 需要用户用ie打开,然后允许activeX的运行就行了,这里面会吧“OCX控件强行注册+可信任站点添加+可信任站点ActiveX安全设置启用+收藏夹”全都做了,收藏夹有提示是否进行收藏

bat+reg版 考虑到用户电脑使用能力不强的情况下,没有对路径及activeX允许运行的约束,采用bat脚本注册ocx,reg导入ie安全设置和可信任站点,这个版本就没有添加将网址加入收藏夹的功能

WEB载入OCX控件教程(VC的OCX教程完整版)

06-02

包括OCX的制作、WEB页面载入、出错的提示等比较完整的教程

Ocx控件开发入门

05-20

初学者开发ocx的文档,使用vs2010制作

OCX函数查看工具EXE

03-14

OCX函数查看工具EXE

c++开发ocx入门实践三--基于opencv的简易视频播发器ocx

05-14

c++开发ocx入门实践三--基于opencv的简易视频播发器ocx 利用opencv做了个简易的视频播放器的ocx,可以在c++/c#/web中加载

ocx websocker

08-04

OCX是一种ActiveX控件,用于在Windows操作系统上嵌入和操纵各种自定义功能。WebSocket是一种用于实现实时双向通信的协议,它允许浏览器和服务器之间建立持久的连接。下面是有关OCX和WebSocket的一些相关信息。

首先,OCX与WebSocket之间并没有直接的联系。OCX主要用于在Windows上开发和部署自定义应用程序,而WebSocket主要用于在Web浏览器和服务器之间进行实时通信。然而,有些OCX控件可能会在Web浏览器中使用,通过JavaScript与WebSocket进行通信。

要在Web浏览器中使用OCX控件与WebSocket进行通信,需要使用一些中间件或框架来使二者兼容。一种常见的方法是使用JavaScript和HTML5来实现与WebSocket通信的功能,并在需要时通过JavaScript与OCX控件进行交互。

为了使OCX控件与WebSocket通信,需要在JavaScript代码中使用WebSocket API来建立连接、发送和接收数据等操作。同时,通过调用OCX控件的方法或设置其属性,可以在浏览器中显示OCX控件的功能和结果。

总结来说,OCX和WebSocket是两种不同的技术,但可以通过一些中间件或框架实现它们之间的通信。通过在浏览器中使用JavaScript和HTML5的WebSocket API,可以与OCX控件进行交互,实现自定义的功能和实时通信。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

kevin--你不知道的事

CSDN认证博客专家

CSDN认证企业博客

码龄9年

暂无认证

71

原创

5万+

周排名

6万+

总排名

30万+

访问

等级

2852

积分

29

粉丝

132

获赞

38

评论

434

收藏

私信

关注

热门文章

ocx入门浅析

41582

获取windows当前登录的用户名

35810

windows代码设置默认音频输出设备

17192

WIN32 预定义宏WIN32,_WIN32,_WIN64介绍使用

13805

大B、小B、码率计算

13228

分类专栏

读书驿站

6篇

【理财篇】币入门介绍

数据结构与算法

19篇

工作报告篇

2篇

工作报告

C++17

调试

2篇

STL

1篇

C++20

1篇

[C++14]

1篇

MFC/WIN32

9篇

win32

7篇

gdi/gdi+

1篇

QT

1篇

IWebBrowser2

4篇

c-c++

29篇

一维数组

2篇

二维数组

2篇

最新评论

【c++实例总结】 时间time_t转为字符串输出(strftime)

sanqima:

CTime转string总结得很好,给楼主点赞。

【c++实例总结】 帧率与码率

CSDN-Ada助手:

多亏了你这篇博客, 解决了问题: https://ask.csdn.net/questions/8041307, 请多输出高质量博客, 帮助更多的人

WIN32 预定义宏WIN32,_WIN32,_WIN64介绍使用

qq_41441842:

微软非要这样整WIN32生怕别人搞懂了

WIN32 预定义宏WIN32,_WIN32,_WIN64介绍使用

香蕉有毒:

这里面门道很多,这篇文章不错。

windows代码设置默认音频输出设备

小赵小赵福星高照~:

大佬如何设置默认输入设备呢

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

[c++] 指定精度格式化

【c++】sort与priority_queue第三个参数

【c++】一维数组与二维数组动态创建

2023年1篇

2022年11篇

2021年36篇

2020年21篇

2019年9篇

2018年25篇

2017年10篇

2016年4篇

目录

目录

分类专栏

读书驿站

6篇

【理财篇】币入门介绍

数据结构与算法

19篇

工作报告篇

2篇

工作报告

C++17

调试

2篇

STL

1篇

C++20

1篇

[C++14]

1篇

MFC/WIN32

9篇

win32

7篇

gdi/gdi+

1篇

QT

1篇

IWebBrowser2

4篇

c-c++

29篇

一维数组

2篇

二维数组

2篇

目录

评论 3

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

OCX 入门-CSDN博客

>

OCX 入门-CSDN博客

OCX 入门

最新推荐文章于 2021-12-12 12:52:26 发布

github/gongluck

最新推荐文章于 2021-12-12 12:52:26 发布

阅读量1.5w

收藏

18

点赞数

4

分类专栏:

Windows

文章标签:

OCX

Windows

专栏收录该内容

35 篇文章

0 订阅

订阅专栏

OCX入门:http://blog.csdn.net/hkcsdn/article/details/52908748 前言

ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。

  ActiveX控件是一种实现了一系列特定接口而使其在使用和外观上更象一个控件的COM组件。ActiveX控件这种技术涉及到了几乎所有的COM和OLE的技术精华,如可链接对象、统一数据传输、OLE文档、属性页、永久存储以及OLE自动化等。

   ActiveX控件作为基本的界面单元,必须拥有自己的属性和方法以适合不同特点的程序和向包容器程序提供功能服务,其属性和方法均由自动化服务的 IDispatch接口来支持。除了属性和方法外,ActiveX控件还具有区别于自动化服务的一种特性--事件。事件指的是从控件发送给其包容程序的一 种通知。与窗口控件通过发送消息通知其拥有者类似,ActiveX控件是通过触发事件来通知其包容器的。事件的触发通常是通过控件包容器提供的IDispatch接口来调用自动化对象的方法来实现的。在设计ActiveX控件时就应当考虑控件可能会发生哪些事件以及包容器程序将会对其中的哪些事件感兴趣并将这些事件包含进来。与自动化服务不同,ActiveX控件的方法、属性和事件均有自定义(custom)和库存(stock)两种不同的类 型。自定义的方法和属性也就是是普通的自动化方法和属性,自定义事件则是自己选取名字和Dispatch ID的事件。而所谓的库存方法、属性和事件则是使用了ActiveX控件规定了名字和Dispatch ID的"标准"方法、属性和事件。

   ActiveX控件可以使COM组件从外观和使用上能与普通的窗口控件一样,而且还提供了类似于设置Windows标准控件属性的属性页,使其能够在包容器程序的设计阶段对ActiveX控件的属性进行可视化设置。ActiveX控件提供的这些功能使得对其的使用将是非常方便的。本文下面即以MFC为工 具对ActiveX控件的开发进行介绍。

一、创建项目

1.打开VS2008新建MFC项目。这里我们取名为“ActiveXDemo” 。

2.输入项目名称为“ActiveXDemo”和项目位置。

点击确定进行下一步。

3.运行时许可证默认不勾选。

如果勾上,生成时会多出一个文件.lic , 只有拥有许可的用户才可以调用ocx插件。继续下一步。

4.完成创建控件项目自动创建好MFC ActiveX程序框架。

其中 的 ACtiveXDemoApp 是 我 们 这 个 控 件 的 主 程 序 模 块 , 定 义 了 控 件的 注 册

( DllRegisterServer)、删除(DllUnregisterServer)等功能,一般不用动,如有需要我们可以

在其中的 InitInstance 和ExitInstance 中定义我们自己的初始化和终止操作代码,一般也就是一些资源的初始化和销毁工作。

CActiveXDemoCtrl 是控件类,我们要做的控件功能基本上就是要在这个类中实现。

需要提一下的是在这个类中重写了父类的 OnDraw 函数,有如下两句代码:

pdc->FillRect(rcBounds,

CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));

pdc->Ellipse(rcBounds);

也就是在控件上画了一个椭圆, 实际控件开发中可以根据功能需要修改重写这个函数来

绘制控件界面。

CActiveXDemoCtrlPropPage 是属性页类,这个类实现了一个在开发时设定控件属性的对话

框。

ActiveXDemoLib 是为客户程序提供本控件的属性、方法以及可能响应的事件的接口的。

二、添加属性,方法和事件

1.属性

属性是ACTIVEX控件想所有容器公开的数据成员。

如下图右键添加属性,属性变量类型我们选LONG,变量名为TimeStyle,其他默认。

2.方法

方法就是控件开放给用户使用的一些功能函数,类似于C++的类函数。开发人员可以提供自定义功能。

如下图所示我们添加一个方法Start(),其他默认。

如下图所示,我们可以从类视图清楚的看到我们添加的属性和方法名。

3.事件

ACTIVEX通过事件通知容器控件上发生了某些事情。将控件开发人员的某一特定操作识别为事件。

如下图所示,我们添加事件,添加事件顺序按照如图所示。事件名我们写OnSend ,内部名称习惯上修改为FIleOnSend.添加一个参数lpstrTime.

如下图,我们可以清楚地看到我们刚才添加的事件

在start事件中我们调用showcurrenttime函数,函数实现已经给出。接着我们回调事件函数。

三、注册与反注册

1.唯一标识ID

如下图Classid 是该控件的唯一标识,这个我们可以在注册表里找到。

2.注册

命令行输入regsvr32 控件路径XXX

3.反注册

反注册控件regsvr32  -u 控件路径XXX

到此我们OCX 控件制作就完成了。

入门二:http://blog.csdn.net/LG1259156776/article/details/52004566

最近开始学ActiveX控件编程,上手不太容易,上网想找相关教程也没合适的,最后还是在师哥的指导下完成了第一个简单控件的开发,现在把开发过程贴出来与大家分享一下~

(环境说明——平台:vs2005;语言:VC++;基于对话框)

 

①新建工程:

首先以管理员身份运行vs2005,文件->新建->项目,选择Visual C++下MFC,模板选MFC ActiveX控件,自定义工程名(我的为MyActiveX),确定后基本采用默认设置,直接”下一步”,不过”控件设置”中”创建的控件基于”改选为STATIC。

  

 

 

②介绍一下默认添加的三个基本类:

CMyActiveXApp:

提供了控件类的初始化(InitInstance)和销毁代码(ExitInstance)。

CMyActiveXCtrl:

用来实现控件建好后有什么功能。

CMyActiveXPropPage:

用来建立属性页,当控件建好后,可让用户通过“可视化”的属性页用鼠标来选择控件的属性。

 

 

 

③新建Dialog视图:

1)选中资源视图,右键单击Dialog,选择”插入Dialog”。(有些vs2005的资源视图在整个工程界面的右边侧)

 

2)默认生成一个包含两个按钮的对话框,对话框ID(默认为IDD_DIALOG1)可自行更改(不与其它的重复即可,我的改为IDD_MYDIALOG)

 

3)重新设计对话框,并增加一个”edit control”(文本框)控件。所有标准控件都在右侧的”工具箱”中(有的vs2005的工具箱在左侧),选中后再在对话框中相应位置单击一下即可,可直接拖动和缩放控件。这些控件的ID都可自行修改。

 

4)注意:关于对话框,一定要将其Visible属性改为True(也就是ID为IDD_MYDIALOG的这个最外层对话框对应的Visible属性,其默认为False),否则,即使其它一切都对,最后对话框的内容还是不显示!!

 

5)另外,对话框的Style属性改为Child(默认为Popup),这样运行的控件就会嵌在网页窗口内,而不是单独弹出一个对话框。当然,这里要根据你的实际需求选择。

 

6)将文本框控件(IDC_EDIT1)的Multiline属性设为True(默认为False),使的文本框内的内容可以分行显示。

 

 

 

④为Dialog创建对应的类:

1)右键单击对话框视图(不要点到某个具体控件),选择”添加类”

 

2)自定义类名,我的叫CMyDialog,注意其对话框ID与IDD_MYDIALOG对应,单击”完成”

 

3)vs2005会自动为你添加基本的代码

 

 

⑤为类添加成员变量

(一)为对话框类创建实例变量

1)在基本类CMyActiveXCtrl中为刚刚新建的对话框类创建实例变量:在类视图中右键单击CMyActiveXCtrl,选择添加->添加变量

 

2)变量类型改为CMyDialog(需手动输入,就是刚刚新建的对话框类的类名),变量名自定义,我的为m_MyDialog,注释就自己随意添加啦~

 

3)完成后就可发现MyActiveXCtrl.h中最后面成功添加上了对话框对象。

P.S.工程记得随时保存!

 

 

(二)为对话框中的控件创建实例变量

1)以”确定”按钮为例,在该按钮处单击右键,选择”添加变量”

 

2)自定义变量名,我的叫m_OKButton。

注意一下”控件变量”是否勾选,”控件ID”是否选为IDOK,若前面是在”确定”按钮控件上右键添加变量的话,这两项应该都默认是对的。

确认后点”完成”即可为该按钮在对话框CMyDialog类中添加相应的成员变量。

 

3)仿照上述几步,为”取消”按钮和文本编辑框也添加相应的成员变量,分别取名为m_CancelButton和m_Edit,对应控件ID为IDCANCEL和IDC_EDIT1。完成后MyDialog.h的最后面就会添加上这几个变量。

 

 

⑥在相应事件中添加代码以创建并绘制对话框和控件

1)为CMyActiveXCtrl类处理WM_CREATE事件,以初始化对话框对象:

左侧选中CMyActiveXCtrl,右侧属性栏选择”消息”那个小图标,找到WM_CREATE,点击下拉按钮,选择”<添加>OnCreate”。

 

2)在MyActiveXCtrl.cpp中现在会多出OnCreate函数(这不是我们自定义的函数,实际是重写的父类的函数),在其中添加一段代码:

m_MyDialog.Create(IDD_MYDIALOG,this);  //初始化对话框

 

3)在MyActiveXCtrl.cpp中的OnDraw函数中添加绘制对话框的代码:

m_MyDialog.MoveWindow(rcBounds,true);

并注释掉后面的”DoSuperclassPaint(pdc, rcBounds);”

 

 

  

⑦为确定按钮添加点击响应事件

1)选中”确定”按钮,在右侧的属性栏点击控件事件小图标(小闪电),点击BN_CLICKED,再点击右侧对应的下拉按钮选择添加OnBnClickedOk函数(在CMyDialog类中)。

 

2)在CMyDialog.cpp中为OnBnClickedOk函数添加相应代码:

         int   nLength=m_Edit.SendMessage(WM_GETTEXTLENGTH);    

         m_Edit.SetSel(nLength, nLength);    

         m_Edit.ReplaceSel(_T("Hello World!——企鹅Sheldon/r/n"));

使得每点击一次确定按钮,文本编辑框添加一行文本:“Hello World!——企鹅Sheldon”。

注释掉”OnOK();”,这样点击确定按钮就不会直接关闭对话框了。

 

 

 

⑧编译调试程序,生成.ocx文件

若以上步骤都成功完成,那么恭喜你,一个简单的ActiveX控件就已经初步编写完成啦!下面进行编译调试。

1)调试前,设置编译模式为Release,也就是将工具栏中执行小图标旁的Debug改选为Release。

 

2)在最上一行的工具栏中选择 调试->启动调试

 

3)成功后会在工程根目录的release文件夹下生成相应文件,其中的MyActiveX.ocx即为我们所需的控件文件,不过它不能直接独立运行,需要借助浏览器,并且需要先在系统注册。

注:调试过程中可能提示”无法找到”tstcon32.exe”的调试信息…要继续调试吗?”,选择是即可。

 

 

⑨注册控件MyActiveX.ocx

1)用管理员身份运行”Windows命令处理程序”(命令提示符),转到MyActiveX.ocx文件所在目录下,为求简便,我将其移到了C盘的MyActiveX文件夹下。

 

相关命令:

1.cd /MyActiveX :转到C盘下的MyActiveX文件夹下。

2.dir :查看当前目录下文件信息

3.regsvr32 xxx.ocx :装载控件

4.regsvr32 -u xxx.ocx :卸载控件

5.regedit :注册表编辑器(在第一个文件夹下的CLSID目录下,有注册号信息)

注:ocx控件使用前一定要先卸载旧的。

 

这里是第一次注册该控件,转到相应目录下后直接输入regsvr32 MyActiveX.ocx即可。成功后会有提示框,直接点确定。

 

 

 

  

⑩注册成功后插入相应网页中

编写测试网页,我推荐使用微软的ActiveX Control Pad,不用自己写代码。

1)运行Microsoft ActiveX Control Pad软件,在代码下方空白处单击右键,选择”Insert ActiveX Control”

 

2)选中我们新注册的MyActiveX Control控件,单击OK

 

3)这时会弹出两个框,一个是我们的控件视图,一个是属性。为控件视图调整适当的窗体大小,然后关闭。

 

4)软件会自动帮你在和之间添加上相应代码,点击工具栏上的保存按钮,将网页保存到所需位置。我就直接保存到桌面上。

 

5)到此,测试网页也编辑完成,用IE打开测试网页,允许阻止的内容,看看,控件是不是成功显示啦~

 

 

 

 

 

好了,一个简单的ActiveX控件就已全部完成,这是一个最基本的例子,希望对初学ActiveX控件的同学有所帮助!

 

 

 

P.S.随便说说Debug和Release的区别吧:     两者都是用于编译,不过两者所依赖的库不同,用处也有区别,具体说来:     Debug我们一般叫调试,编译的结果会包含调试信息,它会有相应的宏,而且不做任何优化,所以编译出来的.ocx或.exe文件会大一点。一般开发者在开发过程中会使用Debug调试。     Release则通常称为发布版本,它不保存调试信息,而且会进行优化,所以编译出来的.ocx或.exe文件会小一点,以期达到代码最小和速度最优。一般是最终完成后发布的版本,为用户使用,一般客户不允许在发布版本上进行调试。

注册反注册OCX:http://blog.csdn.net/piaopiaopiaopiaopiao/article/details/41649495

一:用MFC生成的ActiveX控件,需要注册之后才能使用。

注意:注册与反注册都需要管理员权限,才能操作成功。

注册命令:regsvr32 "E:\Clock.ocx"

反注册命令:regsvr32 /u "E:\Clock.ocx"

在此介绍两个实用工具:

工具一:RegDllView

功能:查看电脑中已注册的组件(dll,exe,ocx),方便的反注册(卸载)组件,删除已注册但文件被删除的假组件。

下载地址:http://www.xiazaiba.com/html/2059.html

工具二:注册表清理工具

功能:清除一些已注册但ocx被删除的组件,即清理垃圾注册项。

下载地址:http://mydown.yesky.com/soft/utilitie/register/282/438782.shtml

调试OCX:http://blog.csdn.net/cbnotes/article/details/8281558

1. TSTCON32.exe的编译:

在编写Activex控件时,可以用到Active X control test container来测试Activex控件,这在Visual Studio 6.0里面是很方便查找的,工具菜单下面就有。但是在Visaul studio 2008 里面TSTCON32.exe这个文件却消失了。是微软疏忽忘了吗?不是的,而是微软把它放在了例子程序里面(提供源码),需要自己编译。详细目录:比如我装在C盘里面,VC的例子在

“C:\Program Files\MicrosoftVisual Studio 9.0\Samples\2052\AllVCLanguageSamples.zip”,把这个文件解压缩以后,在下面的目录可以找到TSTCON32.exe的源代码:“C++\MFC\ole\TstCon”,自己编译就可以了。 

如果没有相关示例,请到这里下载:

http://msdn.microsoft.com/zh-cn/library/f9adb5t5(v=vs.90).aspx

打开TstCon工程后,会发现其中包括两个工程:TCProps和TstCon。

图一:TSTCON解决方案共有两个项目

注意得先编译TCProps(即将TCProps设置为“设为启动项目”),然后再编译TstCon!!!

2.注意事项:

1.由于默认的是Itanium解决方案平台,所以在编译TCProps和TstCon要先将编译平台选为Win32。

2.如果是在Vista或者windows7操作系统下面。你在编译的时候,需要将这两个项目属性中的设置为:“启用用户账户控制”设置为“否”。这样编译后的结果才可以正常在windows7或者vista上面运行,否则在运行时将出现系统配置错误的提示。具体设置如下图所示:

图二:TCProps项目的设置

图三:TstCon项目的设置

提供编译好的TstCon32.exe以供下载(debug版)

http://download.csdn.net/detail/cbnotes/4871829

3.设置在工具菜单中可见:

将上面的生成的TstCon32.exe显示在VS2008 IDE的工具菜单中,以便调用。

具体步骤为:点击:工具->外部工具,将弹出如下对话框:

图四:外部工具

点击“添加”按钮,填写底部的相关信息,设置如下图所示:

图五:相关设置信息

如上图所示,

标题(2):设置为工具的名称,可以根据自己的喜欢设置名字。

命令(3):设置工具的完整路径。

其它的设置可以不填,然后点击“应用”按钮。

在工具菜单中,将出现“ActiveX控件测试容器”的菜单项,点击该项,将弹出ActiveX控件测试容器程序(即TstCon32.exe),如下图所示:

图六:ActiveX控件测试容器

 

要测试某个ActiveX控件,点击“Edit->Inser New Control…”,将弹出控件选择框,选择要测试的控件即可(控件必须要先注册)。

转载请说明出处,谢谢。http://my.csdn.net/cbnotes

优惠劵

github/gongluck

关注

关注

4

点赞

18

收藏

觉得还不错?

一键收藏

知道了

1

评论

OCX 入门

OCX入门:http://blog.csdn.net/hkcsdn/article/details/52908748前言ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。  ActiveX控件是一种实现了一系列特定接口而使其在使用和外观上更象一个控件的COM组件。ActiveX控件这种技术涉及到了几乎所有的C

复制链接

扫一扫

专栏目录

1 条评论

您还未登录,请先

登录

后发表或查看评论

OCX DLL EXE反编译工具_OCXDLLEXE反编译工具_非常适用的工具_

09-29

OCX DLL EXE反编译工具,非常适用的工具

OCX控件了解

weixin_34128237的博客

08-12

477

一、OCX组件的来历

  一般的开发工具都会提供一些标准控件,但不管标准控件多么强大、多么完善,都不能完全满足用户的需要。所以易语言就提供一个接口,允许用户编写自己的控件插入到易语言中使用。用户编写自己的控件在使用方法上同标准控件是相同。按照易语言的接口标准编写的控件就是OCX。由于使用OCX可以节省开发软件的时间,所以现在几乎所有开发工具都允许用户使用OCX来增强其功...

用VB写OCX控件

青哥

10-05

3638

用VB写OCX控件

一、 OCX简介

OCX,即对象类别扩充组件。控件的最大好处是可重复利用,甚至可以在不同的编程语言之间使用,例如可以在VB中嵌入使用VC开发的控件。

二、用VB做一个OCX控件

1、打开VB6.0,鼠标点击左上角“文件(F)”,选择“新建工程(N)”。在弹出的对话框中选择“ActiveX控件”选项,点击“确定”按钮,如下图所示。

2、进入主界面,将工程名从默认的“工程1”改为“timectrl”,如下图所示。

3、在控件的界面里拖放一个“Label”控件和一个“Timer”

ocx注册方法,vs安装包自动安装ocx,以及ocx注册失败的解决方法

Tanasha114的博客

10-21

1万+

一、ocx注册方法

方法一:使用bat命令注册ocx(使用管理员权限运行)

创建文本文件,写入下列命令后,修改文件后缀名为.bat,将该bat文件放置ocx所在文件夹下,然后使用管理员权限运行该bat文件即可(将下列命令中VideoWebCtl.ocx替换成你需要注册的ocx名称即可)。

cd /d %~dp0

regsvr32 VideoWebCtl.ocx

如果注册成功,会显示下图弹窗。

方法二:使用bat命令注册ocx(双击运行bat文件,无需使用管理员权限运行)

同方法一,只是..

ocx开发经验,ActiveX开发快速入门

xiaoxiaoyu85的专栏

12-12

7862

1. ocx下载解压的目标位置,由注册表项指定

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ActiveX Cache

默认为C:\WINDOWS\Downloaded Program Files

inf文件也解压到该目录

下载的ocx在资源管理器中不可见,使用dir命令可见。可以使用copy

ocx入门浅析

kevin的博客

12-20

4万+

1.exe,ocx,dll的区别

分析:exe是一个可执行程序,而ocx看做是一个窗口上的控件(控件即ocx,如button),dll是将函数、变量、类封装在一起的库

ocx的形式如下:

图中的各个都是ocx控件(我是这样认为的),只不过MFC内置了一些控件,但是如果是自己写的ocx控件,程序运行时必须将生成的ocx控件拷到可执行目录下

2.ocx特点(根据普通的butto

VS2010下ocx开发三部曲

dong123ohyes的专栏

09-12

1423

一、用C++ MFC ActiveX开发简单的ocx控件

本文给出了在Visual Studio 2010开发环境下使用向导工具生成一个简单ocx控件的示例。

首先以管理员身份运行Visual Studio 2010,这样做的目的是在将来编译控件时VS2010能自动注册ocx控件,不会出现权限不足导致失败的错误。如果不使用管理员身份运行VS 2010,将来就需要使用regsvr32命令手动注册创建的ocx控件(注意执行regsvr32命令时也要使用管理员身份,即以管理员身份执行cmd.exe,然..

什么是OCX控件?注册它都有哪些作用?

limuzi13的专栏

09-16

9068

当标准控件不能完全满足用户需求时,用户可以编写自己的控件插入到编程工具中使用,编写的控件就是OCX。现在网页中也可以嵌入OCX,并称其为ActiveX控件。目前可以编写OCX的工具包括VB、VC、Delphi。易语言也即将支持OCX。 OCX是一种COM控件,OCX通常所说ActiveX控件,COM的原理是接口与实现分离,为了标识每个OCX的接口,必须在注册表里注册该控件的 GUID码。这样使用

c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目

热门推荐

烂笔头的专栏

01-30

7万+

1.ActiveX的基本概念

         ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体等。。。

         ActiveX控件的后缀名是OCX或者DLL。一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或exe解压成OCX和动

OCX控件入门ActiveX控件入门详解

02-07

OCX控件入门0基础ActiveX控件入门详解

Ocx控件开发入门

05-20

初学者开发ocx的文档,使用vs2010制作

带界面的OCX及测试程序(入门级)

02-18

一个带界面的ocx及测试程序,入门级。想学的人,可以参考这个基本框架,实现更复杂的OCX界面。 一个带界面的ocx及测试程序,入门级。想学的人,可以参考这个基本框架,实现更复杂的OCX界面。

Java毕设-基于springboot+Vue的流浪动物管理系统2(附源码,数据库,教程).zip

03-06

Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。

包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。

该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

项目都经过严格调试,确保可以运行!

1. 技术组成

前端:html、javascript、Vue

后台框架:SpringBoot

开发环境:idea

数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑)

数据库工具:navicat

部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven

2. 部署

如果部署有疑问的话,可以找我咨询

后台路径地址:localhost:8080/项目名称/admin/dist/index.html

前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

Swift 基础库. A collection of Swift extensions and utilities.zip

最新发布

03-06

Swift 基础库. A collection of Swift extensions and utilities.zip

剪映使用教程s240306.pptx

03-06

剪映使用教程s240306.pptx

OFO共享单车(Swift版).zip

03-06

OFO共享单车(Swift版).zip

快速、简洁、解决大文件内存溢出的java处理Excel工具.zip

03-06

Java语音项目的资源包括原生的JSAPI、开源库如CMU Sphinx和FreeTTS,商业化的服务如Google Cloud Speech-to-Text API,以及其他框架和工具。通过利用这些资源,您可以开发出功能强大的语音应用程序。Java语音项目的资源包括原生的JSAPI、开源库如CMU Sphinx和FreeTTS,商业化的服务如Google Cloud Speech-to-Text API,以及其他框架和工具。通过利用这些资源,您可以开发出功能强大的语音应用程序。

ScrollView嵌套ScrolloView解决方案支持OC _ Swift

03-06

ScrollView嵌套ScrolloView(UITableView 、UICollectionView)解决方案, 支持OC _ Swift(持续更新中...)实现原理:.zip

ocx websocker

08-04

OCX是一种ActiveX控件,用于在Windows操作系统上嵌入和操纵各种自定义功能。WebSocket是一种用于实现实时双向通信的协议,它允许浏览器和服务器之间建立持久的连接。下面是有关OCX和WebSocket的一些相关信息。

首先,OCX与WebSocket之间并没有直接的联系。OCX主要用于在Windows上开发和部署自定义应用程序,而WebSocket主要用于在Web浏览器和服务器之间进行实时通信。然而,有些OCX控件可能会在Web浏览器中使用,通过JavaScript与WebSocket进行通信。

要在Web浏览器中使用OCX控件与WebSocket进行通信,需要使用一些中间件或框架来使二者兼容。一种常见的方法是使用JavaScript和HTML5来实现与WebSocket通信的功能,并在需要时通过JavaScript与OCX控件进行交互。

为了使OCX控件与WebSocket通信,需要在JavaScript代码中使用WebSocket API来建立连接、发送和接收数据等操作。同时,通过调用OCX控件的方法或设置其属性,可以在浏览器中显示OCX控件的功能和结果。

总结来说,OCX和WebSocket是两种不同的技术,但可以通过一些中间件或框架实现它们之间的通信。通过在浏览器中使用JavaScript和HTML5的WebSocket API,可以与OCX控件进行交互,实现自定义的功能和实时通信。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

github/gongluck

CSDN认证博客专家

CSDN认证企业博客

码龄8年

暂无认证

97

原创

6万+

周排名

111万+

总排名

30万+

访问

等级

3865

积分

106

粉丝

103

获赞

34

评论

407

收藏

私信

关注

热门文章

Boost asio 官方教程

35565

Brpc学习:简单回显服务器/客户端

16525

OCX 入门

15515

打开文件open()函数的使用方法详解

14663

文件操作(偏移量)

12057

分类专栏

QML

1篇

UNIX网络编程(卷1)学习笔记

20篇

FFmpeg菜鸡互啄

7篇

UNIX网络编程(卷2)学习笔记

4篇

boost学习

2篇

python笔记

14篇

C/C++

32篇

python

14篇

Linux

39篇

Windows

35篇

GUI

7篇

Qt

4篇

Media

20篇

Database

4篇

Lua

1篇

Cocos2d-x

9篇

others

4篇

最新评论

Boost asio 官方教程

一码农:

请教下,调用io_service.run后才将控制权交给操作系统,那为什么timer线程一定义就开始计时了?有没有可能在调用run之前很多异步任务已经完成了?run方法的作用仅仅是阻塞吗?还是说不掉用run有些操作就无法执行?如果仅仅是阻塞那我不调用run,调用getchar之类的阻塞函数可以吗?

Boost asio 官方教程

keyuyukuaiee:

写的非常容易理解,谢谢作者

c语言中函数参数处理顺序-从右向左

「已注销」:

直接看傻了

媒体控制接口(MCI)的学习与使用

GETexas:

看到了,眼瞎

媒体控制接口(MCI)的学习与使用

GETexas:

控制mci视频播放器大小倒没说,只能用windows函数

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

C++实现循环数组/队列

Linux服务器开发&音视频技术整理、学习笔记

hugo搭建的个人博客

2021年1篇

2020年3篇

2018年33篇

2017年113篇

2016年19篇

目录

目录

分类专栏

QML

1篇

UNIX网络编程(卷1)学习笔记

20篇

FFmpeg菜鸡互啄

7篇

UNIX网络编程(卷2)学习笔记

4篇

boost学习

2篇

python笔记

14篇

C/C++

32篇

python

14篇

Linux

39篇

Windows

35篇

GUI

7篇

Qt

4篇

Media

20篇

Database

4篇

Lua

1篇

Cocos2d-x

9篇

others

4篇

目录

评论 1

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

如何解读微软的 OCX 控件和 ActiveX? - 知乎

如何解读微软的 OCX 控件和 ActiveX? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册科技微软解读如何解读微软的 OCX 控件和 ActiveX?关注者21被浏览29,448关注问题​写回答​邀请回答​好问题 2​添加评论​分享​6 个回答默认排序Studio TBsoft​化学话题下的优秀答主​ 关注微软COM/OLE/ActiveX技术大致发展脉络:基础技术:COM(组件对象模型),一种语言无关(二进制调用协议)的面向对象模型,Windows注册表在Win16时代即随COM技术引入。第一个典型应用:复合文档、对象嵌入与在位激活,均成为OLE 2.0最初的一部分。OLE 2.0体系成型:加入对象链接支持,即COM名字对象(Moniker)和IMoniker接口支持,OLE即“对象链接与嵌入”。支持使用脚本语言调用COM组件对象:OLE自动化技术,即IDispatch接口支持(相当于当时的一种语言无关Reflection功能的实现),这是Office宏支持和VBA技术的基础,VB 3.0开始支持OLE自动化。OLE控件:实际是支持IDispatch接口和可连接对象(事件连接点,事件引发)的小型DLL形式OLE嵌入对象组件,可看作是OLE对象嵌入、OLE自动化等技术的结合,作为Windows软件开发中的跨语言可复用组件,首次用于VB 4.0和VC 4.0。OLE控件的扩展名就是OCX(即“OLE控件扩展”),本身是一种DLL(动态链接库)。ActiveX:微软IE 3.0浏览器推出后,COM和OLE 2.0有微小发展,用到了IE以及IE中的HTML网页中,统称ActiveX技术。ActiveX部件:就是COM组件,DLL形式的可以称ActiveX DLL,EXE形式的可以称ActiveX EXE。可被VBScript(微软IE浏览器中对JS的替代技术,Windows自身也支持,相当于Windows下的Python)等脚本语言调用的ActiveX部件:支持IDispatch接口(OLE自动化)的COM组件。ActiveX控件:OLE控件的进一步发展,稍轻量化,可用于IE浏览器中的HTML网页中,可从Internet自动下载到本地执行,IE中对Java Applet的替代技术。一般ActiveX控件与OLE控件差别不大,扩展名仍然是OCX,当然ActiveX控件也一定是COM组件,ActiveX控件更大作用仍是作为Windows软件开发中的跨语言可复用组件,VB 5.0和VC 5.0开始支持ActiveX控件。ActiveX文档(服务器):OLE对象嵌入服务器的进一步发展,作为IE浏览器的一种扩展,可用于在IE浏览器中打开其它软件存储在Internet服务器上的文档,典型例子是Office 97之后版本和Acrobat(Adobe)的PDF阅读器。远程自动化与DCOM技术:远程自动化是通过局域网远程调用支持IDispatch接口(OLE自动化)COM组件或者ActiveX部件的技术,后来发展为DCOM技术,可通过局域网调用一般COM组件或者ActiveX部件。MTS:Windows NT 4.0后期版本(随IIS 4.0提供)为COM组件提供的一种附加企业组件服务,即分布式事务处理服务,COM组件开始可以作为企业应用中间件组件。COM+ 1.0:Windows 2000(Windows NT 5.0)中MTS的进一步发展,为COM组件提供了更多的附加企业组件服务,例如分布式事务处理、消息队列等,并整合了DCOM技术,使得COM组件完全可以用作企业应用中间件,COM到COM+ 1.0,相当于Java Bean到EJB。COM+ 2.0:就是.NET Framework 1.0的微软内部开发代号。Enterprise Services:COM+企业组件服务(仅单指企业组件服务)在.NET Framework中的称呼。编辑于 2023-01-22 18:56​赞同 40​​10 条评论​分享​收藏​喜欢收起​知乎用户还解读ActiveX?都光绪年间的工艺了,现在除了Windows 和Office的大量legacy code 没有谁在大量使用ActiveX了。发布于 2023-01-24 02:07​赞同 2​​1 条评论​分享​收藏​喜欢

将 OCX 和 DLL 文件注册为系统全局 - Windows Client | Microsoft Learn

将 OCX 和 DLL 文件注册为系统全局 - Windows Client | Microsoft Learn

跳转至主内容

此浏览器不再受支持。

请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。

下载 Microsoft Edge

有关 Internet Explorer 和 Microsoft Edge 的详细信息

目录

退出焦点模式

使用英语阅读

保存

目录

使用英语阅读

保存

打印

Twitter

LinkedIn

Facebook

电子邮件

目录

将 OCX 和 DLL 文件注册为系统全局

项目

12/26/2023

3 个参与者

反馈

本文内容

本文介绍如何将 OCX 和 DLL 文件注册为系统全局文件。

适用于:Windows 10 - 所有版本

原始 KB 编号: 186597

摘要

安装或运行应用程序时可能会收到错误,指出需要将 OCX 文件或 DLL 文件注册为系统全局。 记下需要注册的文件。

OCX 文件

在 VGA 模式下启动服务器。

需要使用Regsvr.exe、Regsvr16.exe (16 位) 或 Regsvr32.exe (32 位) 命令将 OCX 文件注册为系统全局。 安装 Visual Basic 或 Visual FoxPro 时,这些命令将包含在开发工具包中。

根据应用程序,可能需要以这种方式注册多个 OCX 文件。

DLL 文件

若要将 DLL 注册为系统全局,请转到 SYSTEM32 目录并找到错误消息中提到的 DLL。 注册名为 Sample.dll 的文件的命令是:

REGISTER /S SAMPLE.DLL

仅当加载程序时,才会识别程序的注册数据。 因此,如果为已加载的程序发出 REGISTER 命令,则更改要到下次加载程序时才会生效。

另请注意,只有管理员才能运行 REGISTER。

反馈

此页面是否有帮助?

提供产品反馈

反馈

Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see: https://aka.ms/ContentUserFeedback.

提交和查看相关反馈

此产品

此页面

查看所有页面反馈

其他资源

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

其他资源

本文内容

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

百度安全验证

百度安全验证

网络不给力,请稍后重试

返回首页

问题反馈

怎么对.ocx格式控件进行注册加载? - 知乎

怎么对.ocx格式控件进行注册加载? - 知乎首发于电脑虾切换模式写文章登录/注册怎么对.ocx格式控件进行注册加载?月下乘风努力努力,在努力很多用户在安装使用软件时,会要求注册加载一个.ocx格式的控件,否则软件程序就无法运行。有的用户在注册这个控件时还会出现错误,提示对DllRegisterServer调用失败,错误代码为0x8002801c。那么遇到这些情况我们该怎么去解决呢?下面就来和大家分享一下具体的解决方法。注册加载.ocx文件的方法1、在网上下载好相应名称的.ocx格式控件(这里以ComCtl32.ocx为例,具体名称看软件提示)。2、根据自己电脑系统的位数将这个控件放入不同的文件夹内,32位系统的放入C:\Windows\System32文件夹内,64位系统的放入C:\Windows\SysWOW64文件夹内。3、接下来有两种方法可以对这个.ocx格式的控件进行注册加载,一种是右键点击该.ocx文件,选择“打开方式”,然后点击“在这台电脑上查找其他应用”,在.ocx所在的文件夹内搜索regsvr32.exe,选中再打开即可。4、另外一种是以管理员的身份运行cmd.exe,Win10系统可以在左下角搜索栏搜索cmd.exe,然后右键点击该结果,选择“以管理员身份运行”;Win7系统就打开开始菜单,然后搜索cmd.exe,右键点击该结果,选择“以管理员身份运行”。5、在打开的命令窗口中复制输入以下代码(注意文件路径和文件名称要匹配),然后按下回车键,命令运行后就会提示Dllregisterserver调用成功,这样就可以了。代码:32位系统:“regsvr32 c:\Windows\system32\comctl32.ocx” 64位系统:“regsvr32 c:\Windows\SysWOW64\comctl32.ocx”Dllregisterserver调用失败,出现错误0x8002801c的解决方法这个问题一般是因为没有管理员权限造成的,只要在以管理员身份运行的cmd.exe中输入以上代码即可。按照上面的方法步骤进行操作,.ocx格式控件文件就可以注册加载成功,也不会出现Dllregisterserver调用失败,出现0x8002801c的错误了。遇到这个问题的朋友快去试试吧。文章转自:如何注册.ocx文件?出现错误0x8002801c怎么办?-装机教程-好系统重装助手官网发布于 2018-06-23 12:03电脑知识个人电脑应用程序(软件)​赞同 7​​4 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录电脑虾介绍电脑使用小技巧,提供电脑问题解

OCX控件的创建与调用_ocx param-CSDN博客

>

OCX控件的创建与调用_ocx param-CSDN博客

OCX控件的创建与调用

最新推荐文章于 2021-12-12 12:52:26 发布

小哈龙

最新推荐文章于 2021-12-12 12:52:26 发布

阅读量1.3w

收藏

26

点赞数

3

分类专栏:

windows c/c++

文章标签:

OCX

windows c/c++

专栏收录该内容

304 篇文章

47 订阅

订阅专栏

1.ActiveX的基本概念

         ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体等。。。

         ActiveX控件的后缀名是OCX或者DLL。一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或exe解压成OCX和动态库共存的文件,然后注册ocx文件。

         ActiveX控件是基于com标准,使得软件部件在网络环境中进行交互的技术集。它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术也被用于方便地创建普通的桌面应用程序,此外ActiveX一般具有界面。

 

2.三个概念:ActiveX、OLE和COM

        从时间的角度讲,OLE是最早出现的,然后是COM和 ActiveX;从体系结构角度讲,OLE和ActiveX是建立在COM之上的,所以COM是基础;单从名称角度讲,OLE、ActiveX是两个商标名称,而COM则是一个纯技术名词,这也是大家更多的听说ActiveX和OLE的原因。COM是应OLE的需求而诞生的,所以虽然COM是OLE的基础,但OLE的产生却在COM之前。COM的基本出发点是,让某个软件通过一个通用的机构为另一个软件提供服务。ActiveX最核心的技术还是COM。ActiveX和OLE的最大不同在于,OLE针对的是桌面上应用软件和文件之间的集成,而 ActiveX则以提供进一步的网络应用与用户交互为主。COM对象可以用C++、Java和VB等任意一种语言编写,并可以用DLL或作为不同过程工作的执行文件的形式来实现。使用COM对象的浏览器,无需关心对象是用什么语言写的,也无须关心它是以DLL还是以另外的过程来执行的。从浏览器端看,无任何区别。这样一个通用的处理技巧非常有用。

 

3.ActiveX控件工程的创建

       使用VS2010有两种方式可以创建ActiveX工程,

第一种:创建“MFC ActiveX 控件”工程;

第二种:创建“ATL 项目”。由于使用ATL开发ActiveX控件需要了解com技术,对程序员的要求也较高,开发时间也较长,所以如果ActiveX只在windows操作系统下运行,那么就使用“MFC ActiveX 控件”工程来快速建立ActiveX控件。但是这里要注意了:使用“MFC ActiveX 控件”工程来快速建立ActiveX控件,他不仅要建立在windows操作系统下,还必须在windows操作系统下安装c++依赖库安装包,因为MFC是建立在微软的c++动态库的基础上的。所以这两种方式各有优缺点,根据项目需求来选择适合的方式。

 

4.使用VS2010创建MFC ActiveX工程项目步骤

         由于使用ATL进行ActiveX工程的创建难度比较大,所以这里先使用“MFC ActiveX 控件”工程来创建一个简单的ActiveX控件。

       第一:新建项目-》选择“MFC ActiveX 控件”工程,给项目命名TestMfcAtlDebug,点击确定,弹出“控件向导”对话框

        第二:在概述,应用程序设置,控件名称和控件设置都可以选择默认,然后点击“完成”,这样“MFC ActiveX 控件”工程创建完成

 

5.分析“MFC ActiveX 控件”工程的三个重要的类以及对外接口定义文件idl

使用向导创建完工程可以看到自动生成了三个类,TestMfcAtlDebug,TestMfcAtlDebugCtrl和TestMfcAtlDebugPropPage

可以打开上面三个类的头文件及cpp文件,发现它们都是派生类。

TestMfcAtlDebug:cpp文件中定义了DllRegisterServer和DllUnregisterServer,可以发现ActiveX的注册和反组册都与该类有关。

TestMfcAtlDebugCtrl:可以发现该头文件中声明了消息映射(让ActiveX控件程序可以接受系统发送的事件通知,如窗体创建和关闭事件),调度映射(让外部调用程序(包含ActiveX的容器)可以方便地访问ActiveX控件的属性和方法),事件映射(让ActiveX控件可以向外部调用程序(包含ActiveX的容器)发送事件通知)。也就是说对ActiveX控件的窗口操作都将在这个类中完成,包括ActiveX控件的创建,重绘,以及在此类中创建可视MFC窗体。

TestMfcAtlDebugPropPage:显示ActiveX控件的属性页的

 

让我们来看看最重要的部分:对外接口定义文件TestMfcAtlDebug.idl,代码如下:

#include   

#include   

  

[ uuid(69EE37F4-8B36-495F-9F60-5E3AAF2FB494), version(1.0),  

  control ]  

library TestMfcAtlDebugLib  

{  

    importlib(STDOLE_TLB);  

  

    //  CTestMfcAtlDebugCtrl 的主调度接口  

    [   

        uuid(6B60346D-5CCD-4907-83F4-51938558A9B7)    

    ]  

    dispinterface _DTestMfcAtlDebug  

    {  

        properties:  

        methods:  

  

            [id(DISPID_ABOUTBOX)] void AboutBox();  

    };  

  

    //  CTestMfcAtlDebugCtrl 的事件调度接口  

  

    [   

        uuid(E26ECC46-9BA2-4C25-A4DD-A690560A5113)    

    ]  

    dispinterface _DTestMfcAtlDebugEvents  

    {  

        properties:  

            //  事件接口没有任何属性  

  

        methods:  

    };  

  

    //  CTestMfcAtlDebugCtrl 的类信息  

    [  

        uuid(DD0CF7EF-A181-428C-B5FC-C44A1C13CA43)  

    ]  

    coclass TestMfcAtlDebug  

    {  

        [default] dispinterface _DTestMfcAtlDebug;  

        [default, source] dispinterface _DTestMfcAtlDebugEvents;  

    };  

  

};  

这个就是对外接口定义文件,如果外部程序想要调用ActiveX的方法,属性以及在注册表注册的classid(WEB网页调用需要使用),就必须了解这个文件,这个文件可以分为四个部分来看:

首先是TestMfcAtlDebug.Lib这个库信息

这个就不做详解

第二部分是调度映射的接口信息,该接口信息包含了属性(如控件背景色)和对外方法

里面定义了一个方法AboutBox(),该方法就可以被外部程序调用,在该接口里定义的函数都是纯虚函数,这些函数的实现都是在TestMfcAtlDebugCtrl中完成的,MFC通过底层的封装,让TestMfcAtlDebugCtrl类继承这个接口,实现函数。

第三部分是事件映射的接口信息

第四部分是类的信息,其中uuid就是ActiveX控件注册到注册表的classid,它是ActiveX注册后在系统内的唯一标识,WEB网页就是使用这个ID加载ActiveX控件的

 

6.定义调度映射和事件映射方法,提供给外部调用者使用 那么怎么定义新的调度映射和事件映射方法呢,如果手动定义很不方便,当然使用编译器进行定义,步骤是打开类视图:

可以看到TestMfcAtlDebugLib中有_DTestMfcAtlDebug和_DTestMfcAtlDebugEvents,在_DTestMfcAtlDebug项中可以右键-》添加方法(或属性),该操作是完成调度映射的方法和属性的添加;在_DTestMfcAtlDebugEvents项中可以右键-》添加方法(或属性),该操作是完成事件映射的方法和属性的添加。

举个例子,如果要添加一个调度映射的方法Fuck2(),使得外部可以调用:

在_DTestMfcAtlDebug项中可以右键-》添加方法,设置框

填写完信息后点击完成,外部就可以调用方法Fuck2,同时ActiveX控件项目代码的内部将会在三个文件中新增代码:

1.在

2.在

3.在

 

7.注册ActiveX控件

按照上面的步骤已经完成简单ActiveX控件(无窗体界面的控件)的编写,重新生成后会在Debug下生成一个TestMfcAtlDebug.ocx的文件,使用windows的dos窗口可以注册这个ActiveX控件

步骤:

首先win+R键打开运行,然后输入注册命令:regsvr32  c:\.......\TestMfcAtlDebug.ocx(反注册命令:regsvr32  c:\.......\TestMfcAtlDebug.ocx -u)

有两种情况会导致控件注册失败:

第一种:使用非Administrator用户登入系统会由于权限不足而无法注册com组件,这时候就必须使用Administrator用户登入操作系统

第二种:ActiveX控件所依赖的dll库被程序给占用,就会导致注册失败,解决办法是将正在运行的程序关闭就可以

 

 8.测试ActiveX控件的方法

按照上面的步骤已经完成ActiveX控件的编写,也将这个控件注册成功了,那么怎么测试这个控件呢,有三种方式:

第一种:使用html网页来测试

在TestMfcActiveX.htm的文件中编写代码如下:

[html] view plaincopy

    Test ActiveX                                  

注意上面的classid就是在idl文件中类的uuid,然后打开这个网页就会显示ActiveX控件。上面的classid在控件成功注册后也可以通过注册表查找,具体方法是win+R键,输入regedit命令,就会弹出“注册表编辑器”,位置在“HKET_CLASSES_ROOT”中,根据你控件的名称,快速按下前三个字母,然后就可以定位到比较好找的位置,如下图

第二种:建立Mfc应用程序,在Mfc窗口右键-》插入“ActiveX”控件,然后就会在MFC的窗体上显示ActiveX控件

第三种:也是最方便的一种方法,就是使用vs自带的ActiveX Control Test Container来测试ActiveX控件,但是VS2010在“工具”中没有这一项,那么我们首先可以手动把这个工具添加到VS2010里,首先找到C:\Program Files\Microsoft Visual Studio 10.0\Samples\2052\C++\MFC\ole\TstCon\TstCon.sln,然后使用VS2010打开解决方案TstCon.sln,编译项目TCProps和TstCon,编译完成后会在C:\Program Files\Microsoft Visual Studio 10.0\Samples\2052\C++\MFC\ole\TstCon\Debug\中生成TstCon.exe执行程序,这个执行程序就是ActiveX Control Test Container,接下来我们就在VS2010中的工具中添加这个TstCon.exe,在VS2010中的“工具”菜单项中选择“外部工具”,在弹出的窗体中添加一个新的工具,标题为ActiveX Control Test Container,命令为C:\Program Files\Microsoft Visual Studio 10.0\Samples\2052\C++\MFC\ole\TstCon\Debug\TstCon.exe,然后点击确定就可以完成工具的添加了。

 

 这样,在“工具”中就有了一个ActiveX Control Test Container,点击它就会弹出测试ActiveX的容器,如下图

点击Edit->Insert New Control->选择TestMfcAtlDebug Control,点击OK

然后就会显示这个注册后的AcitveX控件,如果要测试这个控件的调度映射的方法Fuck2,就先选中控件,然后点击Control-》Invoke Methods,在Methods Name下拉框中选择Fuck2这个方法,点击Invoke按钮就可以测试这个方法了,如下图:

我们可以看到上面的ActiveX控件是一个空白的背景和一个圈组成的,并没有窗体界面,那么怎么添加窗体呢?

 

9.向ActiveX控件中添加一个Mfc窗体,就是一个带界面的ActiveX控件

 步骤:

第一:在资源视图中新建一个对话框资源

去掉上边的“确定”和“取消”按钮,然后修改对话框属性:Border改为None,Control改为Ture,ID改为IDD_MAIN_DIALOG,Style改为Child,System改为False,Visible改为True,然后在对话框中双击,为对话框添加一个类,如下图:

 

点击“完成”。在解决方案资源管理器中新增了一个ViewDialog.h和ViewDialog.cpp这个ViewDialog类就是刚刚我们建立的对话框类

然后拖一个Edit Control到对话框上,修改其ID为IDC_EDIT_OUTPUT,再拖一个Button到对话框上,此时对话框效果为:

 对话框建立完成,接下来就是要把它添加到ActiveX控件中去

 

第二:在TestMfcAtlDebugCtrl.h中定义对话框实例m_VideoDlg

 然后在TestMfcAtlDebugCtrl类中定义两个消息映射:窗体创建完成消息映射和窗体改变大小消息映射

在VS2010的菜单项“项目”--》“类向导”中,选择要添加到的项目和类中,选择“消息”选项卡,选择WM_CREATE后点击”添加处理程序“按钮和选择WM_SIZE

后点击”添加处理程序“,这样在“现有的处理程序”中就有OnCreate和OnSize这两个函数,点击确定,完成消息映射函数的添加,如图:

 在TestMfcAtlDebugCtrl.cpp中自动添加下列代码,如图:

 在OnCreate函数中编写如下代码(Create是在ActiveX控件中创建一个窗体对话框,IDD_VIEW_DIALOG就是刚刚新建的对话框):

 在OnSize函数编写代码如下(MoveWindow是确定窗体对话框在ActiveX中的大小):

 

 第三:重新编译,注册ocx,使用ActiveX Control Test Container再次测试该控件

 可以发现这个ActiveX控件中已经有了界面了

优惠劵

小哈龙

关注

关注

3

点赞

26

收藏

觉得还不错?

一键收藏

知道了

1

评论

OCX控件的创建与调用

1.ActiveX的基本概念ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体等。。。 ActiveX控件的后缀名是OCX或者DLL。一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或exe解压成OCX和动...

复制链接

扫一扫

专栏目录

海康摄像头OCX控件接口+网页demo

10-11

海康威视的摄像头在网页中进行集成时候需要安装OCX控件,此资源为exe版本,安装之后打开index.html这个demo文件。会提示下载安装cab,再次点击安装,即可使用。index.html这个demo中提供了海康摄像头集成的大部分功能,为大家提供参考。

海康威视摄像头OCX控件

08-27

海康威视摄像头OCX控件,可以显示摄像头图像、抓取图像、保存图像等,在C#、VB、组态王中都可以使用。

带:OCX控件接口说明(V2.3).doc

1 条评论

您还未登录,请先

登录

后发表或查看评论

c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目

热门推荐

烂笔头的专栏

01-30

7万+

1.ActiveX的基本概念

         ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体等。。。

         ActiveX控件的后缀名是OCX或者DLL。一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或exe解压成OCX和动

C#开发ActiveX控件及控件的发布

12-01

C#开发ActiveX控件及控件的发布,很详细,自己整理的,和网上的差不多,但是自己根据操作工程中遇到的问题,修改了一下。有图有真相

海康威视组态王OCX控件DLL文件集.rar

09-05

软件介绍:

海康威视组态王OCX控件支持最新版本的海康录像机,具备登录、退出、播放、停止播放,抓BMP图片和存储路径设置等功能。适用于WIN7,WIN10目前没有测试通过。可以作为组态王的OCX控件。NETVIDEO控件包:ClientDemoDllHCNetSDKComAudioRender.dllD3DCompiler_43.dllD3DX9_43.dllEagleEyeRender.dllgdiplus.dllHCCore.dllHCNetSDK.dllHKNETVIDEO.ocxHWDecode.dllMP_Render.dllMP_VIE.dllPlayCtrl.dllSuperRender.dllYUVProcess.dll

组态王 海康威视 视频控件

04-23

海康威视,组态王HKDVR.ocx控件DLL文件集,组态王6.55版本测试过,好用,还有使用说明

OCX 入门

gongluck93的博客

03-21

1万+

OCX入门:http://blog.csdn.net/hkcsdn/article/details/52908748

前言

ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。

  ActiveX控件是一种实现了一系列特定接口而使其在使用和外观上更象一个控件的COM组件。ActiveX控件这种技术涉及到了几乎所有的C

ocx开发经验,ActiveX开发快速入门

xiaoxiaoyu85的专栏

12-12

7862

1. ocx下载解压的目标位置,由注册表项指定

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ActiveX Cache

默认为C:\WINDOWS\Downloaded Program Files

inf文件也解压到该目录

下载的ocx在资源管理器中不可见,使用dir命令可见。可以使用copy

ActiveX基础——什么是ActiveX

a51897768的博客

04-03

735

一种Internet策略 ActiveX是以一种Internet策略出现的。它包含了OLE,COM及Internet开发的各个方面。

ActiveX开发涉及范围广泛 ActiveX开发的包含了许多方面,比如自动化服务器,ActiveX控件,COM对象等等。

术语ActiveX在过去的几年中成为了许多开发人员及团队的战斗口号,另一方面市场也对其大肆宣...

ocx入门浅析

kevin的博客

12-20

4万+

1.exe,ocx,dll的区别

分析:exe是一个可执行程序,而ocx看做是一个窗口上的控件(控件即ocx,如button),dll是将函数、变量、类封装在一起的库

ocx的形式如下:

图中的各个都是ocx控件(我是这样认为的),只不过MFC内置了一些控件,但是如果是自己写的ocx控件,程序运行时必须将生成的ocx控件拷到可执行目录下

2.ocx特点(根据普通的butto

基于C#调用OCX控件的常用方法(推荐)

08-28

下面小编就为大家分享一篇基于C#调用OCX控件的常用方法推荐,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

c#调用vc写的ocx控件示例

09-04

主要介绍了c#调用vc写的ocx控件示例,需要的朋友可以参考下

chrome 调用ocx控件

12-28

chrome调用ocx控件, 安装此插件可以调用身份证阅读器

Qt/C++中使用OCX控件的调用方法及事件处理代码实例

04-28

Qt/C++中使用OCX控件的调用方法及...代码实例简单的调用了OCX提供的函数,和OCX事件处理(采用了信号与槽的方式),调用qt的方法获取列出所有ocx控件的所有信号、函数、属性等。 谢谢大家的分享和分数,我很需要它们。

java调用ocx控件,jacob,jar和dll文件

01-20

java调用ocx控件,jacob,jar和dll文件

Java毕设-基于springboot+Vue的流浪动物管理系统2(附源码,数据库,教程).zip

03-06

Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。

包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。

该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。

项目都经过严格调试,确保可以运行!

1. 技术组成

前端:html、javascript、Vue

后台框架:SpringBoot

开发环境:idea

数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑)

数据库工具:navicat

部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven

2. 部署

如果部署有疑问的话,可以找我咨询

后台路径地址:localhost:8080/项目名称/admin/dist/index.html

前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

Swift 基础库. A collection of Swift extensions and utilities.zip

最新发布

03-06

Swift 基础库. A collection of Swift extensions and utilities.zip

剪映使用教程s240306.pptx

03-06

剪映使用教程s240306.pptx

谷歌浏览器调用ocx控件

07-13

### 回答1:

谷歌浏览器(Google Chrome)是一款目前应用广泛的网页浏览器,用于访问互联网上的各种网页内容。与其他浏览器相比,谷歌浏览器具有更快的网页加载速度、强大的安全性和用户体验。

在使用谷歌浏览器浏览网页时,有时候我们会遇到需要调用OCX(Object Control Extension,对象控件扩展)控件的情况。OCX是一种在Windows操作系统上运行的二进制对象控件,与ActiveX控件类似,用于增强浏览器的功能。

当谷歌浏览器需要调用OCX控件时,它会按照预设的规则查找并加载相应的控件,以确保能够正确执行相应的功能。这些OCX控件通常由开发者或第三方提供,并根据需要引入谷歌浏览器中。一旦OCX控件加载成功,谷歌浏览器就能够使用该控件提供的功能,例如播放音频、视频、处理文件上传等。

在调用OCX控件时,谷歌浏览器会检查控件的完整性和安全性,以确保它不会对用户的计算机造成损害。这是出于安全考虑,以防止潜在的恶意代码对用户的计算机进行攻击或非法操作。

需要注意的是,有些OCX控件可能不被谷歌浏览器支持,或者由于安全限制而不容许使用。在这种情况下,用户可能需要通过其他方式来完成相应的功能,或者尝试使用其他浏览器来满足需求。

总之,谷歌浏览器能够调用OCX控件来扩展其功能,提供更好的用户体验和网页交互。这也体现了谷歌浏览器的灵活性和开放性,以适应不同用户的需求。

### 回答2:

谷歌浏览器不支持直接调用OCX控件。OCX控件(包括ActiveX控件)是一种用于Windows环境下的特殊组件,主要用于在网页中显示多媒体内容或执行其他特定任务。然而,由于谷歌浏览器采用了Chromium内核,该内核与传统的OCX控件不兼容,因此无法直接调用OCX控件。

为了解决这个问题,开发者可以考虑使用其他替代方案。例如,可以使用基于HTML5的原生Web浏览器 API来实现类似功能。HTML5提供了一系列的标准API,如Canvas、WebRTC、Web Audio等,可以用于实现图像处理、音视频播放等功能,从而不再依赖于OCX控件。

此外,如果必须使用OCX控件,用户可以考虑切换到支持OCX控件的浏览器,如Internet Explorer。在Internet Explorer中,用户可以直接调用和使用OCX控件,以实现特定功能。

总之,谷歌浏览器无法直接调用OCX控件,但开发者可以通过使用HTML5的相关API或切换到支持OCX控件的浏览器来实现类似的功能。

### 回答3:

谷歌浏览器可以通过调用OCX控件实现一些特定功能。OCX(Object Linking and Embedding Control)是一个可重复使用的软件组件,它可以被嵌入在其他应用程序中,并提供特定的功能。

在谷歌浏览器中,当需要使用OCX控件时,首先需要在相关的网页或应用程序中引用该控件。通过添加控件的相关代码,谷歌浏览器就能够了解如何调用和使用该控件。

一旦OCX控件被调用,谷歌浏览器可以利用该控件的特定功能。例如,如果OCX控件是用于媒体播放的,谷歌浏览器就能够播放网页上嵌入的音频或视频文件。如果OCX控件是用于动画或特效的,谷歌浏览器也能够展示出这些特效。

谷歌浏览器调用OCX控件的过程是通过调用接口、方法或事件来实现的。OCX控件会提供一系列的接口或方法,用于与谷歌浏览器进行交互。谷歌浏览器可以根据需要调用这些接口或方法,以实现业务逻辑的功能。

总结来说,谷歌浏览器调用OCX控件是通过添加需要使用的控件代码,并通过调用接口、方法或事件等方式与控件进行交互。这样可以为用户提供更丰富的浏览器功能和体验。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

小哈龙

CSDN认证博客专家

CSDN认证企业博客

码龄9年

暂无认证

237

原创

2万+

周排名

3540

总排名

327万+

访问

等级

2万+

积分

777

粉丝

1860

获赞

385

评论

7548

收藏

私信

关注

热门文章

汇编语言中OUT和IN的用法

79516

Win10下IIS配置、项目发布、添加网站

58495

INT 21H 指令说明及使用方法

54167

怎么实现多用户同时远程连接到一台电脑上

53985

Qt Creator 使用技巧(功能快捷键如注释、声明和实现之间切换)

51508

分类专栏

图形处理

11篇

CMake

2篇

数学

10篇

EDA

1篇

Chromium开源项目

2篇

汇编

58篇

Electron

STL

41篇

can总线

5篇

Boost

1篇

网络运维

22篇

OpenCasCade

43篇

电脑设备

17篇

数据库

77篇

windows c/c++

304篇

系统架构师之路

5篇

网络编程

33篇

病毒分析

9篇

加壳脱壳

6篇

批处理

8篇

程序人生

9篇

linux

23篇

NSIS

1篇

BPEL

4篇

Java

1篇

正则表达式

2篇

asp.net/mvc

7篇

Opencv

3篇

AI

1篇

IDA

16篇

C#

37篇

linux c/c++

51篇

html/javascript/jquery

3篇

数据结构与算法

10篇

DuiLib

11篇

QT

45篇

OpenGL

16篇

Python

4篇

设计模式

17篇

GDI/GDI+

3篇

最新评论

OpenCasCade——将鼠标点的位置转换为基于OCC三维坐标系中在某一面上的坐标

小哈龙:

这个就是拓扑面转换出来的,在文章中计算拓扑面的法向量时候有提到agpPlane

OpenCasCade——将鼠标点的位置转换为基于OCC三维坐标系中在某一面上的坐标

weixin_44717825:

你好;我想问一下,我是直接在top面上画的;请问这个PlaneOfTheView应该是什么呢?就是在建模的时候没有特意选择平面;

c++多线程中detach的使用隐患

七小丘人:

观察到指针没有拷贝是真的吗 和我理解的不太一样

c++多线程中detach的使用隐患

七小丘人:

按理来说所有参数都会拷贝到新线程的内存空间中,std::thread构造函数会盲目拷贝已经提供的变量,以至于传引用要使用std::ref才行

c++ 编译代码时Link失败,无法关闭目标文件

Emoren580:

请问有解决吗?这个会导致编译速度慢吗?

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

OpenCasCad 中 TCollection_HExtendedString、TCollection_ExtendedString与QString的相互转换

Open Cascade 获取面的内外环线

Opencascade 开发中V3d_View的常用方法和代码总结

2024年16篇

2023年41篇

2022年46篇

2021年67篇

2020年107篇

2019年203篇

2018年85篇

2017年113篇

2016年150篇

2015年11篇

目录

目录

分类专栏

图形处理

11篇

CMake

2篇

数学

10篇

EDA

1篇

Chromium开源项目

2篇

汇编

58篇

Electron

STL

41篇

can总线

5篇

Boost

1篇

网络运维

22篇

OpenCasCade

43篇

电脑设备

17篇

数据库

77篇

windows c/c++

304篇

系统架构师之路

5篇

网络编程

33篇

病毒分析

9篇

加壳脱壳

6篇

批处理

8篇

程序人生

9篇

linux

23篇

NSIS

1篇

BPEL

4篇

Java

1篇

正则表达式

2篇

asp.net/mvc

7篇

Opencv

3篇

AI

1篇

IDA

16篇

C#

37篇

linux c/c++

51篇

html/javascript/jquery

3篇

数据结构与算法

10篇

DuiLib

11篇

QT

45篇

OpenGL

16篇

Python

4篇

设计模式

17篇

GDI/GDI+

3篇

目录

评论 1

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

调用ocx ActiveX控件详解(做一个简单的ocx控件) - Chellyyy - 博客园

调用ocx ActiveX控件详解(做一个简单的ocx控件) - Chellyyy - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

Chellyyy

博客园

首页

新随笔

联系

订阅

管理

调用ocx ActiveX控件详解(做一个简单的ocx控件)

背景

最近做的项目都和插件有关,就是在页面中调用插件的方法,然后进行操作。

插件就是ocx ActiveX控件,具体的说明可以自己去了解一下,在这里就不做赘述。

具体调用方式很简单:

1、在页面中写一个object标签,标签中定义一个classid属性,这个属性是获取到插件的关键

2、直接在js中获取到这个dom,然后就可以调用插件中的方法

let ocx = document.getElementById("ocx");

let sum = ocx.Add(1,2);

在使用过程中遇到了很多问题,于是自己去摸索了一下如何制作一个ocx插件,也能够帮助自己加深一些使用方面的了解。

 

工具及下载准备

这里使用Visual Studio Community 2019,先下载必须的组件和依赖包。

使用C++的桌面开发和Visual Studio扩展开发这两项必须要勾选。

然后桌面开发中还需要勾选与MFC相关的库,如果不勾选的话无法新建MFC项目

勾选完成后就开始下载相关的包,这个过程需要等待一会。

开始项目

下载完成后就可以开始新建一个项目,在这里选择MFC ActiveX控件,命名为MyMFCActiveXControl

然后就会生成一系列控件名,头文件等等的文件名,这里基本上不用做什么操作,直接完成就好。

唯一需要注意的是一个控件类型ID,这个ID我们后面会用到。

 

点击完成后,就会生成一系列与插件相关的文件,这些文件里面包含了插件的类,头文件,描述等信息。

因为不是专门学习C++的,不对里面的原理和结构进行探究,就取我需要的内容就行。

来找一找那个神奇的classid。

打开视图中的解决方案资源管理器,找到源文件中以idl结尾的文件,这个文件包含了很多与插件相关的信息,例如版本,对外接口等等。

文件中有好几个uuid都和我们用的classid长得很像,但是我们调用的classid是其中类信息下的uuid。

有兴趣了解其他几个uuid的信息可以参考这篇文章来了解:c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目

然后我们来添加一个方法测试一下这个插件。

在类视图中找到以Lib结尾的Liberary,点开找到Control项右击后点击添加—>添加方法

在弹出的选项中添加一个最简单的加法方法,点击确定。

编译器会帮我们在三个文件里面都做一些修改。

在.idl中定义了我们刚才添加的方法

在.h文件中声明了这个方法

在同名的.cpp文件中对方法进行实现,我们将返回值改成p1 + p2;

生成项目,在生成的目录下找到.ocx结尾的文件,这个就是我们生成的插件啦。

现在还没有办法使用这个插件,要在注册表中进行注册。可以用以下两种方式:

1、右击ocx文件选择打开方式,选择C:\Windows\System32文件夹下的regsvr32.exe打开

2、直接运行regsvr32+ocx路径

注册成功后都有以下提示

然后就可以在页面中编写我们的代码进行测试,

但是在调用时意外地报了找不到成员这个错。

查阅资料发现是需要修改浏览器的安全设置。

点击浏览器的设置,找到Internet选项—>安全,因为是在本地测试就选择本地Internet。

选择自定义级别—>对未标记为可安全的ActiveX控件初始化...—>点击启用

其实启用这个选项不是特别安全,特别是让用户多了这一步操作,会增加使用难度,如何绕开这个安全模式可以参考下面的解决方式。

在Ctrl.h头文件中添加如下代码

// for IObjectSafety;不要忘了这个头

#include

   //////////////////////////////////////////////////////////////////////////

// ActiveX控件安全初始化:实现ISafeObject接口

//////////////////////////////////////////////////////////////////////////

//ISafeObject

DECLARE_INTERFACE_MAP()

BEGIN_INTERFACE_PART(ObjSafe, IObjectSafety)

STDMETHOD_(HRESULT, GetInterfaceSafetyOptions) (

/* [in] */ REFIID riid,

/* [out] */ DWORD __RPC_FAR* pdwSupportedOptions,

/* [out] */ DWORD __RPC_FAR* pdwEnabledOptions

);

STDMETHOD_(HRESULT, SetInterfaceSafetyOptions) (

/* [in] */ REFIID riid,

/* [in] */ DWORD dwOptionSetMask,

/* [in] */ DWORD dwEnabledOptions

);

END_INTERFACE_PART(ObjSafe);

//ISafeObject

在Ctrl.cpp中添加如下代码,如果创建的项目名称和我的不一样,记得修改里面的类名

//////////////////////////////////////////////////////////////////////////

// ActiveX控件安全初始化:实现ISafeObject接口

//////////////////////////////////////////////////////////////////////////

// Interface map for IObjectSafety

BEGIN_INTERFACE_MAP(CMyMFCActiveXControlCtrl, COleControl)

INTERFACE_PART(CMyMFCActiveXControlCtrl, IID_IObjectSafety, ObjSafe)

END_INTERFACE_MAP()

// IObjectSafety member functions

// Delegate AddRef, Release, QueryInterface

ULONG FAR EXPORT CMyMFCActiveXControlCtrl::XObjSafe::AddRef()

{

METHOD_PROLOGUE(CMyMFCActiveXControlCtrl, ObjSafe)

return pThis->ExternalAddRef();

}

ULONG FAR EXPORT CMyMFCActiveXControlCtrl::XObjSafe::Release()

{

METHOD_PROLOGUE(CMyMFCActiveXControlCtrl, ObjSafe)

return pThis->ExternalRelease();

}

HRESULT FAR EXPORT CMyMFCActiveXControlCtrl::XObjSafe::QueryInterface(

REFIID iid, void FAR* FAR* ppvObj)

{

METHOD_PROLOGUE(CMyMFCActiveXControlCtrl, ObjSafe)

return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);

}

const DWORD dwSupportedBits =

INTERFACESAFE_FOR_UNTRUSTED_CALLER |

INTERFACESAFE_FOR_UNTRUSTED_DATA;

const DWORD dwNotSupportedBits = ~dwSupportedBits;

//.............................................................................

// CStopLiteCtrl::XObjSafe::GetInterfaceSafetyOptions

// Allows container to query what interfaces are safe for what. We're

// optimizing significantly by ignoring which interface the caller is

// asking for.

HRESULT STDMETHODCALLTYPE

CMyMFCActiveXControlCtrl::XObjSafe::GetInterfaceSafetyOptions(

/* [in] */ REFIID riid,

/* [out] */ DWORD __RPC_FAR* pdwSupportedOptions,

/* [out] */ DWORD __RPC_FAR* pdwEnabledOptions)

{

METHOD_PROLOGUE(CMyMFCActiveXControlCtrl, ObjSafe)

HRESULT retval = ResultFromScode(S_OK);

// does interface exist?

IUnknown FAR* punkInterface;

retval = pThis->ExternalQueryInterface(&riid,

(void**)&punkInterface);

if (retval != E_NOINTERFACE) { // interface exists

punkInterface->Release(); // release it--just checking!

}

// we support both kinds of safety and have always both set,

// regardless of interface

*pdwSupportedOptions = *pdwEnabledOptions = dwSupportedBits;

return retval; // E_NOINTERFACE if QI failed

}

/////////////////////////////////////////////////////////////////////////////

// CStopLiteCtrl::XObjSafe::SetInterfaceSafetyOptions

// Since we're always safe, this is a no-brainer--but we do check to make

// sure the interface requested exists and that the options we're asked to

// set exist and are set on (we don't support unsafe mode).

HRESULT STDMETHODCALLTYPE

CMyMFCActiveXControlCtrl::XObjSafe::SetInterfaceSafetyOptions(

/* [in] */ REFIID riid,

/* [in] */ DWORD dwOptionSetMask,

/* [in] */ DWORD dwEnabledOptions)

{

METHOD_PROLOGUE(CMyMFCActiveXControlCtrl, ObjSafe)

// does interface exist?

IUnknown FAR* punkInterface;

pThis->ExternalQueryInterface(&riid, (void**)&punkInterface);

if (punkInterface) { // interface exists

punkInterface->Release(); // release it--just checking!

}

else { // interface doesn't exist

return ResultFromScode(E_NOINTERFACE);

}

// can't set bits we don't support

if (dwOptionSetMask & dwNotSupportedBits) {

return ResultFromScode(E_FAIL);

}

// can't set bits we do support to zero

dwEnabledOptions &= dwSupportedBits;

// (we already know there are no extra bits in mask )

if ((dwOptionSetMask & dwEnabledOptions) !=

dwOptionSetMask) {

return ResultFromScode(E_FAIL);

}

// don't need to change anything since we're always safe

return ResultFromScode(S_OK);

}

//////////////////////////////////////////////////////////////////////////

然后就可以在页面上进行调用啦,调用成功返回了正确的值。

let ocx = document.getElementById("ocx");

let sum = ocx.Add(1, 2);

alert(sum);

拓展

刚才演示的都是正常情况下的调用,在实际使用时,最重要的场景是如何验证电脑中是否安装了我们需要使用的插件。

常见的办法有两种:

1、调用插件方法时使用异常处理,用try...catch来捕获调用不到插件的情况

我们把插件卸载掉,运行regsvr /u 插件地址来卸载插件

会提示卸载成功

这个时候我们再来调用一下上面的Add方法。

try {

let ocx = document.getElementById("ocx");

let sum = ocx.Add(1, 2);

alert(sum);

} catch (e) {

alert(e);

}

会提示对象不支持Add属性或方法,这样好像就能判断本机是否安装了插件。

但是在版本迭代中,插件的方法肯定会越来越多,不止一个方法,那么这个方法还能帮助我们判断嘛?

我们来尝试注册插件后,调用一个不存在Sub方法。

try {

let ocx = document.getElementById("ocx");

let sum = ocx.Sub(1, 2);

alert(sum);

} catch (e) {

alert(e);

}

也会得到同样的结果,所以这个方法不是判断本机是否安装插件的最佳办法。

这里我推荐第二种办法

2、通过ActiveXObject来检测是否安装插件

var findOcx = function () {

let control;

try {

//插件ProgID

control = new ActiveXObject('MFCACTIVEXCONTRO.MyMFCActiveXControlCtrl.1');

} catch (e) {

console.log(e);

return false;

}

return true;

};

这个方法new了一个ActiveXObject对象,里面的参数就是刚才我们新建项目时标注的控件类型ID。

在.idl文件中也可以找到这个ID。

在注册表中他以这样的形式存在

如果未安装插件,会提示Automation 服务器不能创建对象,这样就把是否安装插件和这个版本的插件是否有这个方法这两个问题区分开来了。

如果插件存在,通过调试,也可以查看插件暴露出来的所有方法。

插件可以做很多事情,可以绕过浏览器的安全限制在本地读写文件,也可以绘制图像,显示视频流等等。

但是插件的局限性也很大。

在实际使用中,版本的更迭提示、不同系统不同浏览器版本的安全模式等等问题处理起来更是让人头疼。

所以建议不到万不得己最好不要使用插件。

posted @

2020-04-29 13:46 

Chellyyy 

阅读(9688) 

评论(3) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

公告

Copyright © 2024 Chellyyy

Powered by .NET 8.0 on Kubernetes

OCX开发总结-腾讯云开发者社区-腾讯云

发总结-腾讯云开发者社区-腾讯云Seven DuOCX开发总结关注作者腾讯云开发者社区文档建议反馈控制台首页学习活动专区工具TVP最新优惠活动文章/答案/技术大牛搜索搜索关闭发布登录/注册首页学习活动专区工具TVP最新优惠活动返回腾讯云官网Seven Du首页学习活动专区工具TVP最新优惠活动返回腾讯云官网社区首页 >专栏 >OCX开发总结OCX开发总结Seven Du关注发布于 2020-12-21 16:03:101.6K0发布于 2020-12-21 16:03:10举报文章被收录于专栏:FreeSWITCH中文社区FreeSWITCH中文社区01OCX开发总结

首先,使用ocx意味着,网站只支持windows!!MFC ActiveX和ATLC++ ocx开发,有ATL和MFC ActiveX两套框架。二者的比较,简单说,MFC封装程度高,故MFC使得你很快完成你的工程并更快的运行起来,但是牺牲了灵活性;ATL更接近COM核心,轻量级。如果ocx需要界面的话,如监控控件需要显示视频流。建议使用MFC ActiveX,可以像MFC Dialog项目那样写界面,尽管说MFC过时了,但C++写简单实用的界面,还有其他更好的选择?如果很在意ocx控件大小的话,只能用ATL,因为MFC ActiveX是MFC项目——打入MFC库,不够轻量。02MFC ActiveX开发ocx注意事项找不到Active Test Control工具(tstcon32.exe)这是一个很实用的ocx测试工具,从VS2010起不再提供这一个工具(据说是由于微软内部评测不理想);但可以从网站下到,可正常使用,最少我目前为止没发现有问题。CLSID如何查看[ uuid(B24A098C-DBEE-482F-914D-7C951CEDAC36), helpstring("GridCapture Control"), control ]

coclass GridCapture

{

[default] dispinterface _DGridCapture;

[default, source] dispinterface _DGridCaptureEvents;

};复制在ProgramName.idl文件,如上位置,索搜关键字coclass快速查找。数据类型一般使用LONG(整型)BSTR(字符串)类型就够了。遇到棘手的情况,使用VARIANT类型——union定义的“万能类型”,当年在VB、VC、C#等扩平台调用时出现过问题,使用复杂,现在具体已经记不清了。建议不要使用bool类型,用long代替:当年在客户那出bug了,最后的原因是true!=true,VB的true值是1,VC是8位全1——255,1!=255。如若使用ocx的bool,推荐判false——都是0。cab打包编写inf文件如下[version]

signature="$CHICAGO$"AdvancedINF=1.0[Add.Code]

MFCActiveXControl1.ocx=MFCActiveXControl1.ocx

mfc110.dll=mfc110.dll

msvcp110.dll=msvcp110.dll

msvcr110.dll=msvcr110.dll[MFCActiveXControl1.ocx]

file-win32-x86=thiscab

clsid={CC62BF54-D650-4123-B626-F356FD28C2A5}

RegisterServer=yes

DestDir=11[mfc110.dll]

file-win32-x86=thiscab

RegisterServer=no

DestDir=11

FileVersion=11.00.50727.1[msvcp110.dll]

file-win32-x86=thiscab

RegisterServer=no

DestDir=11

FileVersion=11.00.50727.1[msvcr110.dll]

file-win32-x86=thiscab

RegisterServer=no

DestDir=11

FileVersion=11.00.50727.1[DestinationDirs]

InstallFilesSection=11复制打包指令cabarc -s 6144 n myocx.cab mfc110.dll mfc110.dll msvcp110.dll msvcr110.dll MFCActiveXControl1.ocx myocx.inf复制demo调用

复制object id属性很重要ocx.name操作ocx接口的name属性ocx.start()调用ocx接口的start方法为什么param标签初始化ocx属性值不成功?!因为在DoPropExchange函数中没有设置void CGridCaptureCtrl::DoPropExchange(CPropExchange* pPX)

{

ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));

COleControl::DoPropExchange(pPX); if (pPX->GetVersion() == (DWORD)MAKELONG(_wVerMinor, _wVerMajor))

{

PX_String(pPX,_T("name"),m_name);

PX_Long(pPX, _T("age"), m_age);

}

}复制js与ocx借助ocx event进行通讯通过MFC向导添加event,会自定生成如下:(以名为TestEvent的自定义消息为例)在idl文件XXXEvents中添加事件的接口定义dispinterface _DMFCActiveXControl1Events {dispinterface _DMFCActiveXControl1Events {

properties:

// 事件接口没有任何属性

methods:

[id(2)] void TestEvent(BSTR name, LONG age);

};复制2.在XXXCtrol类中实现TestEvent方法void TestEvent(LPCTSTR name, LONG age)

{

FireEvent(eventidTestEvent, EVENT_PARAM(VTS_BSTR VTS_I4), name, age);

}复制3.添加事件映射,通常在XXXCtrol.cBEGIN_EVENT_MAP(CMFCActiveXControl1Ctrl, COleControl)

EVENT_CUSTOM_ID("TestEvent", eventidTestEvent, TestEvent, VTS_BSTR VTS_I4)

END_EVENT_MAP()复制附:通过MFC向导添加ocx属性、方法与之雷同,三步操作:在idl文件中添加ocx接口定义,在XXXCtrol类中添加方法实现,在XXCtrol.c中添加映射。开始测试1.ocx端发送事件 在start方法接口里发送TestEvent消息void CMFCActiveXControl1Ctrl::start(void)

{

AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: 在此添加调度处理程序代码

TestEvent(L"Tom", 30);

}复制2.html端复制本文参与 腾讯云自媒体分享计划,分享自微信公众号。原始发表:2018-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除c++编程算法打包本文分享自 FreeSWITCH中文社区 微信公众号,前往查看如有侵权,请联系 cloudcommunity@tencent.com 删除。本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!c++编程算法打包评论登录后参与评论0 条评论热度最新登录 后参与评论推荐阅读LV.关注文章0获赞0目录OCX开发总结

MFC ActiveX和ATLMFC ActiveX开发ocx注意事项找不到Active Test Control工具(tstcon32.exe)CLSID如何查看数据类型cab打包demo调用为什么param标签初始化ocx属性值不成功?!js与ocx借助ocx event进行通讯领券社区专栏文章阅读清单互动问答技术沙龙技术视频团队主页腾讯云TI平台活动自媒体分享计划邀请作者入驻自荐上首页技术竞赛资源技术周刊社区标签开发者手册开发者实验室关于社区规范免责声明联系我们友情链接腾讯云开发者扫码关注腾讯云开发者领取腾讯云代金券热门产品域名注册云服务器区块链服务消息队列网络加速云数据库域名解析云存储视频直播热门推荐人脸识别腾讯会议企业云CDN加速视频通话图像分析MySQL 数据库SSL 证书语音识别更多推荐数据安全负载均衡短信文字识别云点播商标注册小程序开发网站监控数据迁移Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有 深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569腾讯云计算(北京)有限责任公司 京ICP证150476号 |  京ICP备11018762号 | 京公网安备号11010802020287问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档Copyright © 2013 - 2024 Tencent Cloud.All Rights Reserved. 腾讯云 版权所有登录 后参与评论00