VS2005下MFC开发的ActiveX控件的部分总结

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

虽然微软对ActiveX越来越不信任,但是这个技术还是很多人喜欢用的,这个博客的编辑器貌似就用到了ActiveX

在我们编写好ocx控件后只有在打包成CAB文件加入数字签名后才能正常发布,如果你用的是vc6,那么问题简单了,打包完成后不用考虑控件的运行库问题,现在的XP系统和将要淘汰的2kpro都已经有了这样的运行库。但是如果使用的是.net2005就会遇到有关运行库的问题,这些问题只能依靠CAB压缩包中的安装文件 .inf来解决。

首先看看基本的inf文件格式

[version]
;区域设置
signature="$CHICAGO$"
AdvancedINF=2.0 

[Add.Code]
;该项会指明该安装包中有哪些项,这里说明包中有ActiveX.ocxmsvcr80.dllmfc80u.dllmsvcp80.dll 四个项
;
这里一般会使用文件名和项名相同的方法,主要是便于维护
ActiveX.ocx=ActiveX.ocx
msvcr80.dll=msvcr80.dll
mfc80u.dll=mfc80u.dll
msvcp80.dll=msvcp80.dll

[ActiveX.ocx]
;这就是Activex控件文件了
file-win32-x86=thiscab 
;表示所需要的这个文件就在当前的安装包中,file-win32-x86表示该文件是一个win32系统下的文件
clsid={A3B4C60F-24A7-40E8-A06B-1A5EFE5F0A43}
;这里是这个安装包的GUID这个值是在创建项目的时候系统生成在,一般存放在以项目名命名的idl文件中,使用项目的类信息的GUID
RegisterServer=yes
;说明这个控件是需要注册的,
;
一般情况下只有编写的文件是需要注册的,运行库文件和系统中可能存在的DLL文件是不用注册的,MFC70.dll
FileVersion=1,0,0,1
;这个文件的版本,注意要用逗号隔开

[msvcr80.dll]
;这是ocx控件的第一个依赖文件,有的地方说明依赖文件必须按照依赖顺序安装,可以用"所剩dll都依赖的文件最先安装的规则来进行,但是我并没有在MSDN上看到什么地方有很明确的说明,并且在我自己的测试中也没有发现有关顺序的问题,并且很多地方都是将ocx控件写在最前面的,但是ocx文件是最依赖其他文件的,貌似按顺序写的做法有点迷信
FileVersion=8,00,50727,42
;这里是该dll文件的版本,这里注意下,这个版本可以在文件属性的版本选项卡中看到,不知道为什么这里显示的版本号有时会比最外面显示的版本号多一个0,注意,复制到inf文件后要将点分隔符改成逗号分隔符
hook=mfc80installer
;这个hook是个保留字,说明该项目被挂接到哪里,如果有则表示被挂接到目标项,hook不是一个必填项,这里表示该文件将被挂接到mfc80installer

[mfc80u.dll]
FileVersion=8,00,50727,42
hook=mfc80installer
 
[msvcp80.dll]
FileVersion=8,00,50727,42
hook=mfc80installer
;上面两项都跟[msvcr80.dll]一样,这里就不解释了

[mfc80installer]
;挂接项
file-win32-x86=http://192.168.1.117/helloactivex/mfc80.cab
;这里表示这个被挂接的文件的位置在一个地址
run=%EXTRACT_DIR%vcredist_x86.exe
;这里表示从这个地址下载到cab包后执行包里面的vcredist_x86.exe文件,%EXTRACT_DIR%表示下载后的解压目录

上面有一点没有说明白,就是为什么会出现hook这个东西?,很多的inf文件是这样写的

[Add.Code]
msvcr80.dll=msvcr80.dll
mfc80u.dll=mfc80u.dll
msvcp80.dll=msvcp80.dll
ActiveX.ocx=ActiveX.ocx
[msvcr80.dll]
file-win32-x86=thiscab
;该文件在当前安装包中
FileVersion=8,00,50727,42
RegisterServer=no 
;不需要注册
destdir=11
;该文件将被安装到系统所在目录的system32

;........

我使用这样的方法在没有安装过任何软件的2kproXP下测试过,均安装失败,其原因就是运行库不匹配,如果你的控件是用VS2005MFC开发的话,使用这样的方法无法将msvcr80.dllmfc80u.dllmsvcp80.dll这几个控件依赖的文件安装到目标位置的,具体是什么原因我也不明白。

这里的hook就是为了解决上面说的问题:要给被按装该控件的机器安装一个运行环境。很多人可能都看过http://support.microsoft.com/kb/167158/这里说明了如何制作一个inf文件,但是很可惜,微软对mfc的下载支持到VC 6.0就结束了,并且,这里还有一个错误,在他的主要示例中有一段

[mfc42installer]
   file-win32-x86=VALUE=http://activex.microsoft.com/controls/vc/mfc42.cab

上面的“VALUE=”是没有必要的,如果增加了该内容反而会让安装包无法下载。

有了在依赖文件dll的项中有了挂接的hook的值后安装文件会到hook的位置去找需要下载安装的文件,这里我将/Microsoft Visual Studio 8/SDK/v2.0/BootStrapper/Packages/vcredist_x86/vcredist_x86.exe文件做成一个cab文件MFC80.cab,这个包里面只有一个vcredist_x86.exe文件,没有其他文件。

按照上面的方法打包好mfc8的运行库并使用hook的方式将Dll和运行库文件挂接后就可以了。

以上内容在没有安装任何软件的XP2k pro上测都通过了,顺便说下,Activex控件,只要在控件测试的那个工具中跑成了就是好的,如果目标机器上出不来就是环境问题,inf是解决环境问题的唯一途径。

最后补充一点,上面说的都是在发布Release版本的情况,如果是Debug版本就会少两个库文件“MFC80D.DLL”“MSVCR80D.DLL”

 

Accelerator     keys,     such     as     ARROW     keys,     are     first     received     by     the     message     pump     of     the     ActiveX     control's     container.     Even     if     the     control     has     the     focus,     it     does     not     receive     messages     for     keystrokes     that     have     special     meaning     to     control     containers,     such     as     ARROW     and     TAB     keys.     MFC     ActiveX     controls     have     a     chance     to     intercept     these     messages     by     overriding     their     PreTranslateMessage     function.          
     
  However,     PreTranslateMessage     is     not     always     called     for     an     MFC     ActiveX     control.      
     
  RESOLUTION      
  Install     a     Windows     WH_GETMESSAGE     hook     for     the     modeless     dialog     box/propertysheet     derived     class     to     allow     it     to     intercept     keystrokes     and     handle     accelerators.   

自己编写一个简单的ActiveX控件——详尽教程 最近开始学ActiveX控件编程,上手不太容易,上网想找相关教程也没合适的,最后还是在师哥的指导下完成了第一个简单控件开发,现在贴出来与大家分享一下~ (环境说明——平台:vs2005;语言:VC++;基于对话框) 阅读详情

相关推荐

VC++编写ActiveX控件

前言:ocx是ocx控件的扩展名,OCX 是对象类别扩充组件。如果你用过Visual Basic或者Delphi一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如EditBox,Grid,ImageBox,Timer等等。每个控件都有自己的事件、方法和属性。使用了控件的编程非常容易。首先,在程序的设计阶段可以设置一些属性,如大小,位置,标题(caption)等等;在

waxgourd0的专栏 9568

[activeX]VC2005开发MFC ActiveX ocx控件全过程[转]

ActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行。控件下载一次后就驻留在用户本地机器上,下次再访问相同的主页时,可不再下载该控件,而是直接运行用户本地的控件。这里控件容器就是浏览器,用户不需要通过浏览器调用控件的属性或方法。因此,开发面向Web的ActiveX控件开发桌面的控件还要简单些,所复杂

柠檬加冰 4041

VS2005MFC开发ActiveX控件部分总结 inf 篇

虽然微软对ActiveX越来越不信任,但是这个技术还是很多人喜欢用的,这个博客的编辑器貌似就用到了ActiveX。在我们编写好ocx控件后只有在打包成CAB文件加入数字签名后才能正常发布,如果你用的是vc6,那么问题简单了,打包完成后不用考虑控件的运行库问题,现在的XP系统和将要淘汰的2kpro都已经有了这样的运行库。但是如果使用的是.net2005就会遇到有关运行库的问题,这些问题只能依靠C

8506

VS2005开发Wince的控件

 开发Wince的控件,其实并不复杂。下面我就简单的描述一下怎么用VS2005创建一下ActiveX控件。首先打开VS2005,选择“文件”-》“新建”-》“项目”。在项目类型下,选择”Visual C++”下的“智能设备”。在右边的“模板”下,选择“MFC 智能设备 ActiveX 控件”。如下图: 在名称上填写项目名称如“MyActiveX”,然后点“确定”。在控件向导

yulewjx的专栏 1897

如何用visual studio 2005中调试 Windows Mobile MFC ACTIVEX控件

如何用visual studio 2005中调试 Windows Mobile MFC ACTIVEX控件

Welcom to zougangx's blog 946

VS2005 C++ 开发ActiveX控件

VS2005 C++ 开发ActiveX控件 simpleboy 2013/8/20整理 simpleboy2008@163.com ActiveX在网页开发中经常得到应用,基本的开发步骤为: 第一步:开发ActiveX控件 第二步:在网页中通过JavaScript调用ActiveX控件 第三步:通过浏览器使用ActiveX控件 下面给出具体的例子 一、开发ActiveX控件 在V

u011626569的专栏 842

VC2005开发MFC ActiveX ocx控件到发布到.net网站的全部过程

开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件。(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网上发表相关内容的朋友们。) ActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行。控...

dizhi5320的博客 177

MFC ActiveX

要干什么?创建一个控件,导出一个方法,提供一个事件,应用一个属性;方法提供两个输入参数,接收web的输入,事件提供一个参数,把方法输入的两个参数加上属性值传递给web。开始! 第一步创建工程:(VS2005)菜单“文件”--“新建”--“项目”,“项目类型”选择MFC,模版选择“MFC ActiveX 控件”,输入名称“MyActiveX“后确定,接下来弹出的向导中的设置全部采

馋嘴猪没胃口 3820

vs2005中将你的MFC程序转化成ACTIVEX 控件

将你的MFC程序转化成MFC ACTIVEX 控件1.  新建一个mfc activex控件工程2.  点击完成,到控件设置一栏,选择控件基于none,无闪烁激活,可见时激活,单击确定3.  点击菜单栏,选择项目->属性->常规,选择静态库使用mfc和多字符集(字符集不是一定要改,我的员工称是多字符集的)4.  选择资源,插入dialog,设置dialog的属性名称和你原先的mfcdialog相同,border设置为无,style设置为child,visible设置为true。5.  选择普通项目中对话框等

w4521wang的笔记 1367

vs 2005/2008中ActiveX控件的使用

转载自:一片云雾(博客园) 2004年以前,自己曾经大量使用过ActiveX控件。由于当时使用的VC6对ActiveX的支持很好,使用起来很方便,而且ActiveX控件本身就是一个MFC的窗口,有自己的消息循环。而当年自己的技术水平还不够成熟,不知道有回调函数的存在。因此能够对外触发事件通知的ActiveX控件一度是我的最爱。而后来,随着自己水平的提升,对功能的分解不再依赖于动态库、Active

fhzhong的专栏 431
上一篇: 快速安装visual studio 2005 sp1补丁
下一篇: QQ文件传输协议
czbever
博客等级 码龄19年 129粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值