在Web上使用ActiveX控件开发,尤其是在MFC(Microsoft Foundation Classes)环境中,虽然是一种曾经广泛使用的技术,但随着互联网安全标准的发展和技术趋势的变化,它逐渐被边缘化。主要原因是:
1. 安全隐患:ActiveX控件由于其强大的功能,一旦被恶意利用,可能允许用户在不知情的情况下安装恶意软件,如病毒或间谍软件。过去,浏览器用户可能会遇到未经明确许可就被安装的广告软件或流氓插件,这些问题与ActiveX控件的自动安装和权限有关。
2. 兼容性问题:由于控件需要通过浏览器下载和安装,不同操作系统、杀毒软件以及浏览器版本之间可能存在兼容性问题,导致控件在用户端的安装和运行并不总是顺利。
3. 安全策略改变:新的浏览器,如IE7及后续版本,对未签名的ActiveX控件采取了更为严格的安全策略,比如默认屏蔽,这使得开发者必须获得官方的数字签名和安全证书,这一过程既耗时又昂贵。
尽管面临这些挑战,如果你仍然希望了解如何在MFC环境下创建和部署ActiveX控件,以下是基本步骤:
1. **创建MFC ActiveX控件**:使用Visual C++ 6.0的向导功能,创建一个新的MFC ActiveX控件项目。这一步主要是设定控件的基本属性和界面布局,根据实际需求进行定制,开发过程相对较为直观。
2. **添加安全接口**:为了避免在运行时频繁出现安全警告,你需要在控件的主要源代码文件(如xx.cpp而非xxCtr.cpp)中添加安全接口函数。这通常涉及包含`comcat.h`和`Objsafe.h`头文件,声明和实现一个安全的CLSID(类标识符),如示例中的`CICCardApp`类,以及初始化函数`InitInstance()`,确保控件在初始化时遵循正确的安全规范。
- 定义`CLSID_SafeItem`,这是控件的唯一标识符,用于注册表注册和后续的通信。
- 设置版本信息(`wVerMajor`和`wVerMinor`),以支持控件的版本管理。
3. **DLL初始化**:在`CICCardApp::InitInstance()`函数中,确保ActiveX控件模块的初始化流程正确执行。这个函数是DLL(动态链接库)加载时执行的关键部分,它负责处理初始化成功与否的结果。
总结起来,虽然使用ActiveX控件在Web上开发有其历史背景,但在现代浏览器的安全策略下,开发者需要更加关注控件的安全性和兼容性,同时也要考虑到认证和证书成本。对于新手而言,转向更现代的Web技术,如HTML5和Web Components,可能是更为明智的选择,这些技术不仅更安全,而且在浏览器的支持和部署上更加便捷。