pb自动注册ole控件

pb自动注册ole控件

默认分类 2011-02-28 11:32:05 阅读50 评论0   字号: 订阅

方法一: 
 1.手工注册OCX控件
将该控件随程序一起发布,然后,将此文件拷到windows/system,或者直接放在本运行目录,然后执行dos命令,run( "regsvr32   *.ocx ")
*表示具体的文件。然后写注册表,将控件注册标志置为1,在程序开始运行时,先检查该标志,是否需要进行注册

2.自动注册OCX控件
在OCX控件中一般都包含一个DLLRegisterServer函数,可以用此函数来实现OCX控件自动注册。

例如:我们要在应用中自动注册ActiveMovie控件,首先声明外部函数:
Function   Long   DllRegisterServer()   LIBRARY   "amovie.ocx "
然后在脚本中调用此函数:
DLLRegisterServer()
注意:不能保证此方法对所有OCX控件都适用!   
 
方法二:
1、在DOS或Windows命令行下运行:regsvr32   ocxname.OCX   注册
2、用Install   Shield,在里面选“Self-Registered”,安装程序将自动注册。
3、在PB应用程序中注册:
函数声明:
Function   long   DllRegisterServer()   Library   "ocxname.OCX "
调用:
LONG   ll_RC
ll_RC   =   DllRegisterServer()
 
方法三:
  为了扩展应用程序的功能,许多系统都使用了或多或少的ActiveX控件,这些控件必须在系统中注册后才能够使用。所以分发PowerBuilder应用程序时,必须将系统所使用到的这些ActiveX控件一起分发到用户所使用的计算机上,并且注册它们,只有这样系统才能继续使用这些控件。  
  本文将提供三种实现方案,供读者选择使用。  
  方法一:在InstallShield中使用程序对控件进行注册  

  InstallShield提供了一套编程语言,语法规则与C++语言非常类似,使用很容易掌握。选中“Scripts”页,你就可以看到安装程序实际执行的源代码,通过添加代码可以实现许多功能。要注册控件必须先将控件所需文件拷贝到目标计算机上,所以必须选择适当的位置添加注册语句。SetupRegistry()函数就是在文件复制完毕后进行系统注册的地方,所以在这里注册控件最合适。  

  function   SetupRegistry()  
    NUMBER   nRootKey,   nResult;  
    STRING   szProgram,   szCmdLine,   szMsg;  
    STRING   szHkey;  
    STRING   szKey,   szClass,   szNumName,   szNumValue;  
  begin  
    nResult   =   CreateRegistrySet( ″″ );  
  //注册程序中用到的OCX控件  
  szProgram   =   ″Regsvr32   /s″;  
  //假设我们将Myocx.ocx文件复制到〈COMMONFILES〉/My   Shared下  
  szCmdLine   =   COMMONFILES^″//My   Shared//Myocx.ocx″;  
  //给执行文件路径加上引号  
  LongPathToQuote   (szCmdLine,   TRUE);  
  //执行生成的命令:例如Regsvr32   /s   ″C:/   Program   Files/Common   Files/My   Shared″。  
  if   (LaunchAppAndWait(szProgram,   szCmdLine, WAIT) < 0)   then  
     MessageBox(″MyAnimateX   控件注册失败!″,   SEVERE);  
  end if;  
     return   nResult;  
  end;  

方法四:用注册表的方法实现  
  大家知道,一般安装程序结束后,为了使系统可以运行,经常需要重新启动计算机,这是由于安装程序修改了注册表或者一些系统文件(Autoexec.bat等),必须重新启动才能生效。注册表中有这样一个主键,专门用于存放一些只运行一次的程序,存放在这里的一些执行命令只是在Windows系统启动时运行一次,之后便被清空,所以取名为RunOnce:  

    HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/RunOnce,所以我们可以在InstallShield中的注册表编辑器中在该主键下添加要执行的代码,来完成控件的注册,如上图所示。  

  注意,此方法必须保证安装程序弹出“是否重新启动计算机”的对话框,这样才能保证用户知道必须重启后才能正常使用本系统。  
  

方法五:在PB程序中实现  
  安装程序只需负责将OCX拷贝到相应路径下,PB程序必须可以得到这个路径,建议拷贝到Windows系统目录或者与执行文件同目录下。  
  具体代码:  
  //首先定义API函数,如果OCX控件在与执行文件同目录下,使用GetCurrentDirectory函数;如果OCX控件放在系统目录下,使用GetSystemDirectory函数。  
  Function   ulong   GetCurrentDirectory(ulong   nBufferLength,ref   string   lpBuffer)   Library   ″kernel32.dll″   Alias   for   ″GetCurrentDirectoryA″  
  Function   uint   GetSystemDirectory(ref   string   lpBuffer,uint   uSize)   Library   ″kernel32.dll″   Alias   for   ″GetSystemDirectoryA″  
  //在PB应用(Application)的Open事件,假设OCX控件在Windows系统目录下。  
  string   ls_PathName,ls_Command  
  ulong   ll_RequiredBufferSize  
  ls_PathName = Space(255)  
  ll_RequiredBufferSize   =   GetSystemDirectory(ls_PathName,255)  
  IF  ll_RequiredBufferSize = 0 or  ll_RequiredBufferSize > 255 THEN  
        //报错信息  
  else  
             ls_Command = ″Regsvr32  /s ″ + ″~″″  + ls_PathName + ″/Myocx.ocx″ + ″~″″   
             Run  (ls_Command)
             //....
       End   if  

  Regsvr32后面的“/s”执行参数是为了隐藏注册成功消息框

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值