牧者

大风起兮云飞扬

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

Active 控件开发<一>

最近在做的一个B/S 系统要在客户端读取USB 锁的要求,所以就需要写一个OCX 来验证。原来也没有做过,所以折腾了好几天,总算有点眉目了,所以把心得写下,交流下。

首先要弄明白你要写的OCX 是用在客户端还是用在服务器端
假如用在客户端:

1创建

打开delphi 7,选择菜单“new”>“other”>“activex”>“active form”>输入项目名称,系统自动给你创建了3个文件,一个是项目文件,一个是form 的单元文件,还有一个后缀带TLB 的文件。这三个文件中的你只需要更改form 的单元文件,项目文件一般不需要写什么,TLB 文件有系统自动维护。

 

2增加接口函数

所谓接口函数就是调用OCX 的程序可以直接调用的函数,如果你要写的函数不提供外部函数可以按常规声明就可以。但要声明接口函数则必须按步骤声明,有两种途径,其一:选择form 单元文件,然后点击“edit”[u1] >“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[u2] ,这样就可以调试 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”,但两者是有区别的,具体可以网上查询。

 

1.1             第二部分:开发

1.1.1      了解ocx控件的相关dll ,用Depends.exe工具查看。

 

1.1.2      下载函数

Uses URLMon, ShellApi;

function DownloadFile(SourceFile, DestFile: string): Boolean;

begin

  try

    Result :=  UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;

  except

    Result := False;

  end;

end;

 

procedure TForm1.Button1.Click(Sender: TObject);

const

  // URL Location

  SourceFile := ′http://www.google.com/intl/de/images/home_title.gif′;

  // Where to save the file

  DestFile := ′c:\temp\google-image.gif′;

begin

  if DownloadFile(SourceFile, DestFile) then

  begin

    ShowMessage(′Download succesful!′);

    // Show downloaded image in your browser

    ShellExecute(Application.Handle,PChar(′open′),PChar(DestFile),PChar(′′),nil,SW_NORMAL)

  end

  else

    ShowMessage(′Error while downloading ′ + SourceFile)

end;

 

1.2             第三部分:调式

按照网友的方法

 

第四部分:注册的解决方法的确定

第五部分:Web调式

Delphi activex bug 将AxCtrls.dcu 复制到C:\Program Files\Borland\Delphi6\Lib\目录下

http://codecentral.borland.com/Item.aspx?id=18656

 

第六部分:数字签名

 


 [u1]工具栏中的edit

 [u2]function  auto_run()  

  {  

  var   url1="http://127.0.0.1:8889/otdr/chart/20071207024941640.dwg";  

  SmartvueX.set_url(url1);      

  }  

  //-->  

  </script>  

  <table   border=0   align=center>  

  <tr><td>  

  <OBJECT name="SmartvueX"  

      classid="clsid:D2E058E4-4719-425F-BF87-9375EC15B928"  

      codebase="SmartvueX.ocx#version=1,0,0,0"  

      width=800  

      height=640  

      align=center  

      hspace=0  

      vspace=0  

  >  

posted on 2012-10-26 15:17  牧者.D  阅读(205)  评论(0)    收藏  举报