ActiveX组件编制与ASP接口应用
ActiveX
ActiveX是Microsoft为了使开发人员能够把计算机桌面环境与构成Internet及其大量资源的环境集成起来,同时保护在Windows中现有的开发投资。ActiveX包括对两个现有Microsoft技术的一系列扩充和增强,这两个技术是:Win32 API和组件对象模型(COM),对象链接和嵌入(OLE)应用是基于它构造的。
所谓ActiveX组件是指一些可执行的代码,比如一个 .exe,.dll 或 .ocx 文件,它们在提供对象时遵循ActiveX 的规范。通过ActiveX技术,程序员就能够把这些可复用的软件组装到应用程序或者服务程序中去了。
ASP
ASP是服务器端的脚本编写环境,您可用它来创建动态 Web 页或生成功能强大的Web应用程序。ASP页是包括HTML标记、文本和脚本命令的文件。ASP页可调用ActiveX组件来执行任务。
ActiveX组件的创建、注册
你可以为大量的Internet和Intranet高级应用创建ActiveX组件,现在就以一个实例来探讨ActiveX组件的创建、注册和在ASP页中的使用。
程序员可以用任何一种支持自动化的程序语言开发ActiveX组件。选择程序语言应考虑:你对这种语言的熟悉程度,工具支持,运行时性能,线程模型,代码复杂程度,已编译代码的大小。可以用来编写自动化组件的语言和产品有:Microsoft Visual C++, Microsoft Visual Basic和Java。本文使用的实例采用Microsoft Visual Basic编写。
ASP本身也具有几类内嵌的ActiveX组件,其中包括File Access组件,但是一般只用于客户端的文件读写;如果要实现对服务器端的文件读写,就需要给Winnt Server的Internet匿名访问帐户IUSER_XXXX(下划线后为Winnt Server的主机名)对Web Site的写权限,这样就造成系统安全的漏洞。通过创建一个读写特定文件的服务器端ActiveX组件,就可以保证系统安全性。
现在简单叙述一下在Microsoft Visual Basic 5.0中编制ActiveX组件的过程:
1. 打开Microsoft Visual Basic 5.0,在新建工程窗口中选择“ActiveX DLL”(图1);
2. 在工具栏中选择“添加类模块”,添加类、属性、方法等(图2);
3. 可以给新添加的类模块起名、设置属性。本文的ActiveX组件的类如下,注意FileText类的Instancing属性设置为“5-MultiUse”(图3);
4. 然后还需要给ActiveX组件提供一个客户方调用入口,选择工具栏“添加模块”,然后键入一个空的main()过程以作为客户方调用的入口(图4);
5.把工程名设置为“Stone”,注意:工程名加类名“Stone.FileText”是以后在ASP中调用此ActiveX组件的“ProgID”;
6. 在菜单中选择“文件生成FileText.dll”,把文件编译为DLL文件(图5);
7. 把FileText.dll文件Copy到“C:\Winnt\ system32\”路径下,在此路径执行“C:\Winnt\system32\ regsvr32 FileText.dll”在Winnt注册表中注册此DLL文件。完成后,可以在Winnt注册表中查到“Stone .FileText”组件的CLASSID是“{425BDE6C-D38F-BA80-00104B27C01D}”,表明组件已经正确注册。
在ASP页面调用自制ActiveX组件
用以下两种方法在ASP页面调用上述的组件:
A. 静态调用
使用HTML标准Tag :<Object>和</Object>,示例如下:
<OBJECT
id=FT
classid="clsid: 425BDE6C-D38F-BA80-00104B27C01D"
width=1
height=1
align=left>
之后,就可以在ASP语句中使用此ActiveX组件的几个方法了;
B. 动态调用
使用ASP内嵌Server对象的CreateObject()方法:
<%
Set FT = Server.CreateObject("Stone.FileText") '创建组件的实例(即对象)
CurPath = server.mappath("Sms/")
'得到虚拟路径“Sms/”的Winnt实路径
CurPath = CurPath & "\" & RS_Movie("Link_Filename") '得到全路径
FT.OpenReadText CurPath, 1
'使用“Stone.FileText”组件的OpenReadText方法打
'开一个文件
%>
结束语
通过上面的例子,读者可以看到:ActiveX组件是应用功能在Internet/Intranet上实现的最有效方法。读者可以尝试用ActiveX和ASP结合来完成许多复杂的应用功能开发。读者可以从以下网址得到很多功能强大的免费ActiveX组件、ActiveX控件,用以研究、借鉴:
用VC6.0开发ActiveX控件是很方便的,下面用一个HelloWord小例子介绍一下:
打开VC6.0,新建一个工程(Projects),选取择MFC ActiveX ControlWizard,填上工程名(Project name),
选好工程路径,点OK.
第一个属性页,可以设置本工程包函几个控件,是否给控件加运行许可等,现在保持默认.点完成.
ActiveX控件是运行在容器里的,如果想在VC6里测试工程,可以点执行,系统会提示让指定执行文件.点查看,
找到这个文件:Microsoft Visual Studio\Common\Tools\TSTCON32.EXE,打开是一个测试ActiveX控件的窗口.
然后点编辑(Edit).插入新控件(insert new Control),找到自己的控件,快速打出自己控件的名字就能自动找到.
要想在外部程序调用ActiveX的方法,需要把方法发布出去:
点视图(View).类向导(ClassWizard),选自动控制(Automation)选项卡,点添加方法键添加一个方法HelloWord.
外部名好内部名都写HelloWord.
想在IE里调用ActiveX控件,要在注册表里注册,编译链接后,系统会自动写入注册表信息.也可以自己手动注册,
命令是regsvr32,要注册自己写的控件,只要在运行对话框里写:regsvr32 *.ocx提示成功即可.反注册加 -u 参数.
注册以后可以到注册表里找到自己注册的控件,在运行里打regedit打开注册表编辑器,用控件的名子查找到控件,
把CLSID复制出来,在网面里调用要用到这个ID.
然后新建一个HTML文件,首先要加载控件:
<object id="myocx" classid="clsid:E5CB2C66-66E1-4FFD-81D7-08B08BFB8D65"
codebase="C:\Program Files\Microsoft Visual Studio\MyProjects\test1\Debug\Hello.ocx"></object>
然后就可以写一个JS函数调用控件里的方法:
<script type="text/javascript">
function sayHello()
{
document.getElementById("carder").sayHello();
}
</script>
如果想在OCX里面加载DLL,要把DLL文件放到C:\WINDOWS\system32文件夹下.不然会找不到文件.
其实ocx控件是标准控件, VB/VC开发要用到打量的ocx, 至于在哪里调用都是可以的(win平台下). 用Interdev可以很方便的把ocx嵌入asp中, 支持鼠标拖放, 直接修改属性就可以了.