最近在做的一个
B/S
系统要在客户端读取
USB
锁的要求,所以就需要写一个
OCX
来验证。原来也没有做过,所以折腾了好几天,总算有点眉目了,所以把心得写下,交流下。
首先要弄明白你要写的
OCX
是用在客户端还是用在服务器端
假如用在客户端:
假如用在客户端:
1、
创建
打开
delphi 7
,选择菜单
“new”
-
>“other”
-
>“activex”
-
>“active form”
-
>
输入项目名称,系统自动给你创建了
3
个文件,一个是项目文件,一个是
form
的单元文件,还有一个后缀带
TLB
的文件。这三个文件中的你只需要更改
form
的单元文件,项目文件一般不需要写什么,
TLB
文件有系统自动维护。
2、
增加接口函数
所谓接口函数就是调用
OCX
的程序可以直接调用的函数,如果你要写的函数不提供外部函数可以按常规声明就可以。但要声明接口函数则必须按步骤声明,有两种途径,其一:选择
form
单元文件,然后点击
“edit”
-
>“add to interface”
,弹出一个对话框,输入要声明的函数,如:
function fun:integer;
其二:选择
form
单位文件,然后点击
“view”
-
>“Type Library”
,弹出一个对话框,然后点击工具栏中
“add a interface”
可以增加函数或过程。说明:在这里注意几个地方,第一,一定要选
form
文件才可以,否则相应的菜单都是不可用的;第二、声明函数或过程的参数类型要注意
string
-
>BSTR
(第二种途径)或
WideString
(第一种途径)。增加属性也函数类同。
3、
调试
我是用
html
调试的,所以可用在
delphi
种配置
run
的参数
“run”
-
>“parametes”
,弹出一对话框,在
“host application”
中输入
C:\Program Files\Internet Explorer\IEXPLORE.EXE
,
在
“parametes”
中
http://192.168.6.9/my.htm
,这样就可以调试
Delphi
代码了
4、
发布
在没有
build
前,可以
“project”
-
>“web deployment”
中配置(主要输入
ocx
的地址和
web
服务器的
url
),然后可以
“web deploy”
发布,其实就是生成了一个
htm
文件,不过该文件里包含了调用方法而已。但是
delphi
好像至运行执行一次,发布后这两个菜单就不可用了,甚至刚开始我不知道,直接编译了,编译后该菜单也不可用了。说明:如果没有用
“web deploy”
发布,而想在网页中调用的,就要知道该
ocx
的
GUID
,可以在
TLB
文件中找,
CLASS_XXX
后面的就是,这一点也需要注意。
5、
数字签名
要想网页能够顺利使用
ocx
,就需要数字签名,否则
IE
直接就给干掉了,当然
IE
安全级调低除外。关于生成测试数字签名的方法,网上很多。我想要说得是,测试数字证书只能用在
win2000
系统,用在
XP
,特别是打了补丁的
XP
,根本不行。另外也可以参考《使用
Delphi
快速开发
ActiveX
控件》这篇文章如果用在服务器端:其实应该是
COM
组件了吧,
asp
的调用方式是
<%
set obj=Server.CreateObject("DelphiCom.Test2")
%>
a 、创建
打开 delphi 7 ,选择菜单 “new” - >“other” - >“activex” - >“active libray” 生成一个项目,然后再
“new” - >“other” - >“activex” - >“automation object” ,然后参照上面增加接口函数,就可以。不过编译出来是个 dll ,但是是可以注册的 dll 。
“automation object” 也可以换成 “com object” ,但两者是有区别的,具体可以网上查询。
<%
set obj=Server.CreateObject("DelphiCom.Test2")
%>
a 、创建
打开 delphi 7 ,选择菜单 “new” - >“other” - >“activex” - >“active libray” 生成一个项目,然后再
“new” - >“other” - >“activex” - >“automation object” ,然后参照上面增加接口函数,就可以。不过编译出来是个 dll ,但是是可以注册的 dll 。
“automation object” 也可以换成 “com object” ,但两者是有区别的,具体可以网上查询。
转载于:https://blog.51cto.com/zsqztg/208428