ActiveX控件开发总结

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

创建ActiveX工程:

可以使用VC建立MFC工程或者ATL工程来进行ActiveX控件开发。使用MFC方式建立,系统会自动实现一些ActiveX控件必须的接口,开发人员只需关注业务就可以了;使用ATL方式建立,开发人员需要实现十几个COM接口(ActiveX实际上是COM的一种),需要对COM有一定的了解。但是使用MFC方式,最后发布的安装包要包含引入了的MFCDLL(视频控件引入了两个,总共3M左右),会导致安装包会比ATL方式大一点。

1MFC方式

使用MFC方式创建ActiveX工程比较简单,只要选择了MFC ActiveX工程,之后都按系统下一步就可以了。

 

 

2ATL方式

使用ATL方式创建,没有仔细研究过,待补充。

 

调试ActiveX工程

可以使用两种方式调试ActiveX控件:ActiveX测试容器或者IE,建议使用IE作为调试工具,因为ActiveX测试容器有些地方和IE不太一样,而且实际使用是嵌入到IE中使用的。

1、使用ActiveX控件测试容器

可以使用系统自带的ActiveX测试容器来进行调试,调试时选择自己的ActiveX控件名,即可打开创建的工程。


 


 

2、使用IE

也可以使用IE来进行调试,需要自己先创建一个包含了此ActiveX控件(通过CLSID指定)的HTML文件,调试时指定参数为此文件。


HTML文件内容如:

<BODY>

<OBJECT ID="NVS_VAE" CLASSID="CLSID:c8cd5ebc-817b-401f-ab06-05cc55c8d9ee">

</OBJECT>

</BODY>

其中ID可以随便定义CLASSID是与创建的ActiveX工程中自动生成的ID保持一致在创建工程的×××Ctrl.cpp

// 初始化类工厂和guid

 

IMPLEMENT_OLECREATE_EX(CNVS_VAECtrl,"NVS_VAE.NVS_VAECtrl.1",

                       0xc8cd5ebc, 0x817b, 0x401f, 0xab, 0x6, 0x5, 0xcc, 0x55, 0xc8, 0xd9, 0xee)

注:使用IE8的话,默认是多线程,不支持ActiveX控件的调试,可以修改如下注册表,来支持调试

Windows Registry Editor Version 5.00

 

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]

"TabProcGrowth"=dword:00000000

 

JavaScrip调用ActiveX控件中的对外方法

页面可以通过JavaScript调用ActiveX控件中的方法与控件进行交互:

1、传入参数

<BODY>

<OBJECT ID="NVS_VAE" CLASSID="CLSID:c8cd5ebc-817b-401f-ab06-05cc55c8d9ee">

<PARAM NAME="lInitFacePara" VALUE="0">

</OBJECT>

</BODY>

 

2、调用方法

通过getElementById 方法,传入控件ID(比如前面的MyPostItCtrl),来调用ActiveX控件中提供的接口(假定StartRealVideoActiveX中提供的对外接口)

 <SCRIPT   language=JScript>

   function test()

   {

        document.getElementById("MyPostItCtrl").StartRealVideo (“摄像机ID”,”码流ID”);

   }

 </SCRIPT>

ActiveX控件的打包安装

可以把ActiveX控件打成CAB包,在页面中指定该CAB包的位置,如果目标机器访问页面时,没有安装过此控件,则IE会自动下载此CAB包到目标机器,并进行安装

1、 确认ActiveX控件依赖于哪些DLL

使用vcDEPENDS.EXEMicrosoft Visual Studio\Common\Tools目录下)打开ocx/dll文件,即可看到其依赖的dll文件


 

2、 创建INF文件,用记事本编辑以下信息 

[version]    

signature="$CHINA$"   

AdvancedINF=1.0   

   

[Add.Code]    

evS1300.ocx=evS1300.ocx    

msvcr71.dll=msvcr71.dll    

mfc71.dll=mfc71.dll    

msvcp71.dll=msvcp71.dll    

   

[evS1300.ocx]    

file=thiscab    

clsid={0440906E-9BD6-4F3E-B65A-39E1B339D9DA}    

FileVersion=1,0,0,0   

RegisterServer=yes    

   

[msvcr71.dll]    

file-win32-x86=thiscab    

RegisterServer=no    

DestDir=11   

FileVersion=7,10,3052,4   

   

[mfc71.dll]    

file-win32-x86=thiscab    

RegisterServer=no    

DestDir=11   

FileVersion=7,10,3077,0   

   

[msvcp71.dll]    

file-win32-x86=thiscab    

RegisterServer=no    

DestDir=11   

FileVersion=7,10,3077,0  

evS1300.inf的内容里,[version][Add.Code]项是必须的,[Add.Code]的键值项的多少取决于以下你所配制项的多少。[msvcr71.dll][mfc71.dll][msvcp71.dll]就是上面我所说不是必须的项,只要你想把msvcr71.dllmfc71.dllmsvcp71.dll包括在发布包里,那这么三项就必须写在inf里,而这三项的具体内容是固定的,可复制过去即可。最为关键的就是[evS1300.ocx]项,其中有clsidFileVersion就是evS1300.ocxclassIdversion,这要求必须一至,否我们发布出去的CAB包时不能在客户端自动更新下载安装。说到这里,那我们如何才能知道evS1300.ocx里面的classIdversion呢?我在上面的必备条件里介绍到有一个用于查看ocx控件的工具ActvxDoc,对,就是用它,我们双击这个文件运行它,此时可以看到图13所示的界面:

在图13的界面里,点击“FileàOpen…”,打开您所要查看的OCX控件,如图14所示:

打开了控件之后,我们在界面的右边部位“Class”的下拉框里选择“”就可以看到我们想要查找的FileVersionclassId,如图15所示:

3、 使用iexpress进行打包

可以使用系统自带的iexpress.exeC:\WINDOWS\system32目录下)工具进行打包。工具默认是8.3命名格式,会把不符合命名规则的文件名截断,可以在打包过程中选择长命名。




      

       之后都下一步即可。

4、 CAB包进行签名

1、 制作(购买)证书

正式的证书需要向相关机构购买,可以制作测试的证书,步骤如下:

Visual Studio的安装目录下,有制作证书和签名的相关工具

E:\Microsoft Visual Studio 8\SDK\v2.0\Bin\ makecert.exe

命令行中执行如下命令来创建证书和私钥文件:

E:\Microsoft Visual Studio 8\SDK\v2.0\Bin>makecert.exe -sv D:VAE.pvk -ss VAE -n

"CN=huawei" -$ commercial -r D:VAE.cer

在弹出的窗口中输入证书密钥密码


再次确认密码


 

证书文件就生成在指定位置了。

2、 CAB包进行签名

Visual Studio的安装目录下,有制作证书和签名的相关工具

E:\Microsoft Visual Studio 8\SDK\v2.0\Bin\ signtool.exe

在命令行执行:signtool.exe signwizard命令,会启动签名向导


 

签名向导:


 

下一步,选择要打包的CAB文件


下一步选择自定义


 

下一步选择“从文件选择”,选择前面生成的证书文件


下一步选择“磁盘上的私钥文件”,选择前面生成的私钥文件


下一步输入密码


 

确定后选择MD5加密


之后一直下一步(根据需要填写内容,也可都默认)

最后再输入一次密码,就成功签名了


5、 页面指定路径

页面中指定CAB包位置和版本号

<BODY>

<OBJECT ID="NVS_VAE" CLASSID="CLSID:c8cd5ebc-817b-401f-ab06-05cc55c8d9ee"codeBase="NVS_VAE.CAB#version=1,0,0,1">

</OBJECT>

</BODY>

访问到此页面,IE自动判断CLSID在目标机器上是否有注册,没有注册重新下载,并注册,有注册,比较版本号,有更新则取根据setup.ini中的版本号进行更新。可以到C:\WINDOWS\Downloaded Program Files目录查看CAB包是否有下载安装。

6、 使用安装程序打包

另外,也可以制作安装程序(可以使用常用的安装程序制作工具,也可以使用VS自带的建立安装部署功能来进行),把安装程序打到CAB包中,这样当IE下载CAB包的客户机上后,会根据setup.ini中的指定执行命令,执行安装程序,由客户自己选择安装路径

脚本如下:

;//这里注意了,发行包安装的信息

[setup.exe]

fileVersion=8.0.50727.42

hook=InstallerHook

;//这项并没有设置file-win32-x86的值,因为它并不在CAB里面,这里设置了一HOOK,让HOOK

;//来处理

 

//发行包的安装来源

[InstallerHook]

;//这里安装默认是在同X.CAB的目录,如果是在网站,可以更改为URL路径

;//如:http://www.x.com/vcredist.cab

 

file-win32-x86=NVS_VAE.CAB

;//这里就是让CAB自动解压过后,运行CAB包里面的 setup.exe

run=%EXTRACT_DIR%\setup.exe

 

开发过程中一些经验总结

以下总结主要由李俊峰(lijunfeng 00165774/huawei,)、李伟(liwei 00165242/huawei,)、姜川(j00132245)总结

1.自定义CListCtrl,使用自定义列表头CHeaderCtrl

在自定义CListCtrl的列表头时,需要替换系统自带的CHeaderCtrl,网上代码的处理方式通常是在自定义的MyListCtrl中重写PreSubclassWindow,并在其中调用(其中m_MyHeaderCtrl是自定义的CHeaderCtrl,作为MyListCtrl的成员变量

       if(GetHeaderCtrl())

              m_MyHeaderCtrl.SubclassWindow(GetHeaderCtrl()->m_hWnd);

这种方法在MFC桌面程序中可以奏效。但是放到ActiveX中时,此处的GetHeaderCtrl()==NULL,所以无法达到替换表头的效果(具体原理未知,有兴趣的同学可以研究)。解决办法是在创建自定义的MyListCtrl之后手动调用

m_MyHeaderCtrl.SubclassWindow(GetHeaderCtrl()->m_hWnd);

当然需要把这个包装成一个InitMyHeader之类的public方法放到MyListCtrl中。

完整代码请参考VAEListCtrlVideoListCtrl及其使用。

 

2.ActiveX窗口上的自定义控件添加ToolTip

为自定义控件添加ToolTip时,一般做法是在PreTranslateMessage中添加如下代码:

if (NULL != m_pToolTipCtrl)           

              m_pToolTipCtrl->RelayEvent(pMsg);

希望CToolTipCtrl能够捕获鼠标移动等消息,但是结果PreTranslateMessage方法在ActiveX程序中不会执行(经验证在ProjectName+Ctrl(即整个ActiveX获得输入焦点)时PreTranslateMessage方法会执行)。

解决办法是为控件添加OnMouseMove消息响应,在OnMouseMoveUINT nFlags, CPoint point)方法中添加代码:

//构造一个MSG

        MSG msg;

        msg.hwnd = m_hWnd;

        msg.message = WM_MOUSEMOVE;

        msg.wParam = LOWORD(point.x);

        msg.lParam = LOWORD(point.y);

        msg.time = 0;

        msg.pt.x = LOWORD(point.y);

        msg.pt.y = HIWORD(point.y);

        m_ToolTip.RelayEvent(&msg);

这样才会使鼠标在控件上移动时显示ToolTip,但是要求要先点选过该控件才行。如果想要更进一步去掉这个先点选控件的限制,则需要在自定义控件的父窗口中响应OnMouseMove消息,并构造MSG关联到ToolTip。此时需要注意point的坐标转换。

完整的相关代码(PTZControlWndBitmapSlider)如下:

 

父窗口PTZControlWnd

//成员变量声明

CBitmapSlider m_bsSpeedOrStepsize;

voidPTZControlWnd::OnMouseMove(UINTnFlags,CPointpoint)

{

   (void)nFlags;

UpdateToolTipText();//更新ToolTip文字

m_bsSpeedOrStepsize->RelayToolTipEventFromParent(point);//此处的point的坐标是相对PTZControlWnd

   VAEBaseWnd::OnMouseMove(nFlags,point);

}

 

控件CBitmapSlider

//成员变量声明

CToolTipCtrl m_ToolTip;

voidCBitmapSlider::RelayToolTipEventFromParent(CPoint &point)

{

   //将相对父窗口的坐标转换成屏幕坐标

GetParent()->ClientToScreen(&point);

 

//从屏幕坐标转换成相对控件自身CBitmapSlider的坐标

ScreenToClient(&point);

 

//因为在CBitmapSlider::OnMouseMove中也要用到,所以提取成函数

   RelayToolTipEvent(point);

}

 

voidCBitmapSlider::RelayToolTipEvent(constCPoint &point )

{

   if (m_ToolTip.m_hWnd !=NULL)

    {

        //构造一个MSG

       MSGmsg;

 

       msg.hwnd =m_hWnd;

       msg.message =WM_MOUSEMOVE;

       msg.wParam =LOWORD(point.x);

       msg.lParam =LOWORD(point.y);

       msg.time = 0;

       msg.pt.x = LOWORD(point.y);

       msg.pt.y = HIWORD(point.y);

 

       m_ToolTip.RelayEvent(&msg);

    }

}

 

为整个ActiveX添加ToolTip的方法可以参考MSDN,同样没有使用PreTranslateMessage方法

http://support.microsoft.com/kb/141871/zh-cn

 

3.MFC ActiveX控件添加对外接口

打开类视图,找到ProjectName+Lib,此处为NVS_VAELib


_D+ProjectName(此处为_DNVS_VAE)上右键弹出菜单,选择添加方法


弹出窗口如下所示,填写相关内容,注意字符串类型参数需要选择BSTR

填写完毕点击『完成』,如果出现错误提示,可以关闭VisualStudio,删除解决方案文件夹下的“.ncb”文件,然后重新打开解决方案再添加方法。

修改已经添加的对外接口签名时注意除了声明和实现外还需要在“.idl”文件中更改相应的调度接口。


 

4.对外接口BSTR参数转换为char *

生成的方法签名中的对应BSTR类型的是LPCTSTR

javascript传进来的Unicode字符串转换为内部接口使用的char*,需要使用MFC宏,

USES_CONVERSION;

char *pszCameraID =W2A(bstrCameraID);

 

5.关于网页的刷新

     ocx加载在网页上时,如果F5刷新,ocx控件会销毁ocx的窗口类,但是ocxapp类是不销毁的,

 只有当网页关闭时,才销毁app类。

 1 刷新引起的问题

     app类中有成员变量时,请注意刷新回来后变量的值还是刷新前的值。

 2 利用刷新app类的不析构恢复刷新前的状态

     可在控件的APP类中保存刷新前的值,刷新后恢复刷新前的状态

 

6.一个网页中加载两次(或者多次)OCX控件

同一进程加载两次控件时,app类调用一次,ocx窗口类调用两次。也就是说两个控件实例使用的是同一个app类的实例,只是有各自的窗口。这时如果app类中有成员变量,值得注意。

 

7.当将UNICODE字符串转化为多字符集字符串时注意的问题

 unicode字符串中含有汉字时,注意转化前后的字符串长度。

 例如:TCHAR* pUnicde=_T("abc例子"); // pUnicde长度5

 char* pMutiBtye=T2A(pUnicde); // pMutiBtye长度是7,一个汉字占两个字节

 

8.开发DLL等控件时,加载字符串/图片等资源失败的原因

       MFC的对话框装载资源是通过获取当前线程对应的ModuleState保存的ResourceHandler来装载资源的。

       所以,DLL里的代码,需要在函数的入口,首先把当前执行线程的ModuleState换成该DllState,这样才能装载该dll的资源

       即:使用AFX_MANAGE_STATE(AfxGetStaticModuleState());

 

9.SetEventPulseEvent的区别

       SetEvent为设置事件对象为有信号状态;而PulseEvent也是将指定的事件设为有信号状态,不同的是如果是一个人工重设事件,

       正在等候事件的、被挂起的所有线程都会进入活动状态,函数随后将事件设回,并返回;如果是一个自动重设事件,

       则正在等候事件的、被挂起的单个线程会进入活动状态,事件随后设回无信号,并且函数返回。

       也就是说在自动重置模式下PulseEventSetEvent的作用没有什么区别,但在手动模式下PulseEvent就有明显的不同,

       可以比较容易的控制程序是单步走,还是连续走。如果让循环按要求执行一次就用PulseEvent,如果想让循环连续不停的运转就用SetEvent

       在要求停止的地方发个ResetEventOK了。


delphi之:如何快速开发原生ActiveX控件 ActiveX技术虽然是一项古老的技术,但是却有着广泛的应用,支付宝的密码输入控件,各大银行的密码输入控件,网页聊天室中的截屏功能,网页播放器中的p2p播放...甚至Flash,Silverlight等等,在IE中都表现为ActiveX。虽然c#也能开发"用于网页的com应用",能达到类似ActiveX的效果(可参见c#中开发ActiveX的学习笔记),但是有一个要命的问题是必须得安装几百M的.n 阅读详情

相关推荐

使用MFC开发ActiveX控件全过程- -

导读:   Tag   Visual C++是开发ActiveX控件的强大工具,它的特点是开发周期短、便于使用,因此它已经成为开发ActiveX控件的主要工具之一。Visual C++集成开发环境,使用了微软自己的类库MFC,MFC对开发ActiveX控件提供了全面的支持,本文讲述的过程均在Visual C++ 6.0(以下简称VC)中实现。   1、 创建工程:   对于使用过VC的人,

xu的blog 2255

快速学会ActiveX控件开发

ActiveX 是一个打开集成平台提供用于开发Internet和Intranet程序集成和内容。

VC ActiveX 控件 开发总结

VC 制作ActiveX 控件(OCX) http://ileson.iteye.com/blog/1002910 1、vc6下建立一下activeX工程     详见http://hi.baidu.com/mailrabbit/blog/item/0624a608bde798346b60fbb6.html 2、在页面中调用     2.1:注册ocx到系统(也可以这样)  C

bcbobo21cn的专栏 3334

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

## 本文基于MFC的ActiveX控件开发,很大程度上和基于ALT的ActiveX控件编写有相同之处 ## 首先创建基于MFC的ActiveX控件 OK一路下一步,完成 添加与外部接口,ClassView-》Lib-》Events-》ADD-》method 设置接口返回值,并非所有都有效,一般LONG,SHORT,FLOAT有效(实测),字符串BSTR有效,其他需要可以自己测试。 在Solu

qq422243639的博客 1663

ActiveX控件的实现

  ActiveX控件的实现 本章目标: 完成本章学习后,您将能够: Ø         了解什么是ActiveX控件 Ø         掌握如何编写基于MFC的ActiveX控件 Ø         掌握如何测试ActiveX控件 Ø         掌握如何测试ActiveX控件 Ø         了解ActiveX控件如何注册 重点:Ac...

weixin_34124577的博客 535

ActiveX控件开发实战:从基础到JavaScript交互

本文还有配套的精品资源,点击获取 简介:ActiveX技术是微软推出的一种用于构建跨应用程序的可重用控件的技术,主要应用于Windows平台。通过VS2008创建ActiveX控件的过程涵盖了从项目设置、ATL与COM理解,到实现接口、控件注册、调试测试的全过程。同时,详细阐述了JavaScript如何调用ActiveX插件以及ActiveX控件的应用场景和安全兼容性问题。...

weixin_42627459的博客 1958

深入解析MFC ActiveX控件开发

ActiveX控件是微软公司推出的一种基于COM(Component Object Model)技术的软件组件,它们可以在互联网上被安全地下载和执行。ActiveX控件可以嵌入到网页中,也可以嵌入到支持OLE(Object Linking and Embedding)技术的应用程序中,从而使得这些应用程序可以调用ActiveX控件所提供的功能。组件对象模型(Component Object Model,COM)是由微软开发的一种软件架构,它允许应用程序之间通过一种特定的接口进行交互。

weixin_33557333的博客 1128

ActiveX开发详解

配套源码:http://download.csdn.net/detail/mingojiang/4743623 转载请注明出自:http://blog.csdn.net/MingoJiang 一、ActiveX基础 1.1什么是ActiveX ActiveX是COM规范的一种实现,前身是OLE(Object Linking and Embedding)。一般读成:ActiveX Ctr...

Chinamming的专栏 708

ActiveX控件开发

ActiveX控件开发     这段时间因为工作的需要,开发了一个ActiveX控件,采用的开发工具是VC,希望可以给大家做类似的开发时提供参考。 一,ActiveX控件的功能:1,主要是用来下载和保存指定的网页。2,要能够嵌在网页中,供服务器页面的脚本调用。3,提供下载保存到哪个文件夹的窗口,给用户自己选择保存位置的机会。4,提供程序接口,使得用户可以保存单个文

hurricane的专栏 1591

ActiveX控件开发小结

ActiveX控件开发小结 一、ActiveX控件简介 ActiveX控件是Microsoft的ActiveX技术的一部分。ActiveX控件是可以在应用程序和网络中计算机上重复使用的程序对象。创建它的主要技术是Microsoft的ActiveX技术,其中主要是组件对象模型(COM)。ActiveX控件可以以小程序下载装入网页,也可以用在一般的Windows和Macintosh应用程序环境中。

EffortForever 1399

使用C#开发ActiveX控件全攻略

转自:http://lwchome.spaces.live.com/blog/cns!791B533443007D37!234.entry   前言: 这段时间因为工作的需要,研究了一下ActiveX控件。总结如下: 先说说ActiveX的基本概念。 根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫

yusongwhu的专栏 7353

ActiveX控件用于DHTML开发

ActiveX控件用于DHTML开发  ActiveX控件用于DHTML开发国防大学图书馆技术室 王渤【提要】动态Web页面DHTML的开发方法很多,如使用扩展标记语言XML、服务器端CGI(或ASP)、基于ActiveX Control(控件)动态实时页面的开发;本文将主要讨论第三种方式,即ActiveX Control(控件)动态实时页面的开发,并通过VB5的实例,说明自制控件的方法。一、Ac

winehero的专栏 2649

使用C#开发ActiveX控件

ActiveX 是一个开放的集成平台,为开发人员、用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法。 使用ActiveX, 可轻松方便的在 Web页中插入 多媒体效果、 交互式对象、以及复杂程序,创建用户体验相当的高质量多媒体 CD-ROM 。      简单的说,用activeX和js差不多,但是有些是js无法实现的,这个时候就

记得微笑的专栏 4134

VC++进行ActiveX控件开发

链接

enjoy.day 753

使用MFC开发ActiveX控件

前言  ActiveX控件是一种实现了一系列特定接口而使其在使用和外观上更象一个控件的COM组件。ActiveX控件这种技术涉及到了几乎所有的COM和OLE的技术精华,如可链接对象、统一数据传输、OLE文档、属性页、永久存储以及OLE自动化等。  ActiveX控件作为基本的界面单元,必须拥有自己的属性和方法以适合不同特点的程序和向包容器程序提供功能服务,其属性和方法均由自动化服务的IDispat

sjl_cn的专栏 1554

使用C#开发和部署ActiveX控件

组件对象模型(Component Object Model, COM)是微软定义的一种二进制接口标准,允许软件组件通过系统级别的接口进行交互。COM技术为不同语言和平台间的通信提供了统一的规范,是Windows操作系统的核心组件之一。COM组件通常表现为一个或多个接口,这些接口提供了方法(函数)、属性和事件。一个组件可能包含一个或多个接口,但必须至少实现一个接口。ActiveX控件就是基于COM技术的一类组件,它们可以在浏览器或者其他支持COM的应用程序中运行。

weixin_35750483的博客 863

C#开发ActiveX控件

[转自]原文地址:http://www.cnblogs.com/yilin/p/csharp-activex.html [转自]原文地址:https://www.cnblogs.com/zhouxiaoyun/p/5801196.html [转自]原文地址:https://jingyan.baidu.com/article/8ebacdf010ba2c49f65cd5aa.html 前言 Acti...

weixin_43926268的博客 803

ActiveX控件开发

要使用C#实现一个ActiveX控件,需要解决三个问题: 1.使.NET组件能够被COM调用 2.在客户机上注册后,ActiveX控件能通过IE的安全认证 3.未在客户机上注册时,安装包能通过IE的签名认证 本程序的开发环境是.NET Framework 3.5,工具是Visual Studio .NET 2008,在安装.NET Framework 3.5的客户机上通过测试。 ...

weixin_30376083的博客 164

Qt开发自定义ActiveX控件:Qt调用自定义的ActiveX控件

在Qt项目中,我们需要创建一个自定义控件类,用于实现我们的ActiveX控件的功能。填写类的名称,并点击"下一步"。通过以上步骤,我们成功地使用Qt开发了自定义的ActiveX控件,并在Qt应用程序中调用了它。在Qt应用程序的主窗口中,我们需要添加一个QAxWidget控件,用于承载我们的自定义ActiveX控件。在本文中,我们将探讨如何使用Qt开发自定义的ActiveX控件,并展示如何在Qt应用程序中调用这些控件。在Qt项目的.pro文件中,我们需要添加一些配置,以便生成我们的自定义ActiveX控件

CodeJolt的博客 844
上一篇: 多核与并行
下一篇: 30种编程语言的比较选择问题
wwl33695
博客等级 码龄18年 136粉丝 46原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值