方法一: 
 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”执行参数是为了隐藏注册成功消息框。

pb自动注册ole控件的更多相关文章

  1. 【VS开发】windows注册ActiveX控件

    ActiveX控件是一个动态链接库,是作为基于COM服务器进行操作的,并且可以嵌入在包容器宿主应用程序中,ActiveX控件的前身就是OLE控件.由于ActiveX控件与开发平台无关,因此,在一种编程 ...

  2. 用.net installshield打包程序时注册第三方控件

    制作打包程序时如果用到外部控件需要按以下方式操作: 1.将控件及控件所用到的所有DLL加入打包程序. 2.将控件的Register由vsdrfDoNotRegister改为vsdrfCOMSelfRe ...

  3. 用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件

    用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件用C#编写ActiveX控件 开发浏览器控件这是本控件开发完成后的一个简单应用.我们可以利用它以本地文件夹为单位来批量更新服务器的 ...

  4. jquery 自动补全控件(支持IE6)待整理

    自动补全控件(兼容IE6):http://bassistance.de/ download地址:http://jquery.bassistance.de/autocomplete/jquery.aut ...

  5. windows下注册ocx控件

    OCX 是对象类别扩充组件(Object Linking and Embedding (OLE) Control Extension):是可执行的文件的一种,但不可直接被执行: 是 ocx 控件的扩展 ...

  6. Regsvr32注册ActiveX控件

    命令:Regsvr32 XX.dll 注册ActiveX控件 Regsvr32命令参数:/u 卸载ActiveX控件/s 注册成功后不显示操作成功信息框/c 控制台输出/I 调用DllInstall安 ...

  7. 如何在Web.config中注册用户控件和自定义控件

    问题: 在ASP.NET 的早先版本里,开发人员通过在页面的顶部添加 指令来引入和使用自定义服务器控件和用户控件时,象这样: <%@ Register TagPrefix="scott ...

  8. 【转载】OLE控件在Direct3D中的渲染方法

    原文:OLE控件在Direct3D中的渲染方法 Windows上的图形绘制是基于GDI的, 而Direct3D并不是, 所以, 要在3D窗口中显示一些Windows中的控件会有很多问题 那么, 有什么 ...

  9. Qt5 UI信号、槽自动连接的控件重名

    Qt5 UI信号.槽自动连接的控件重名 来源 http://blog.csdn.net/goldenhawking/article/details/51865909 对Qt5稍有熟悉的童鞋都知道信号. ...

随机推荐

  1. 从github获取代码

    以duilib为例: 1 建立一个文件夹,右键 git bash here. 2 git init 3 git clone https://github.com/duilib/duilib.git

  2. Linux下怎么删除非空目录

    rm -rf 目录名 解释: 1.r意思是删除目录,f意思是force的缩写,强制删除,不提示. 2.如果目录为空,可以用 "rmdir 目录名"删除. 3.如果目录不为空,可以用 ...

  3. CSS样式应用

    CSS样式应用的方法: (1)行内样式,将css样式直接放到标签当中,一般都是放入标签的style属性中,它是最方便的一种样式,也是最不方便修改的样式.如下: (2)内嵌式,通过将css写在网页源文件 ...

  4. C++ 指向成员函数指针问题

    成员函数指针与常规指针不同,一个指向成员变量的指针并不指向一个内存位置.通常最清晰的做法是将指向数据成员的指针看作为一个偏移量. class ru_m { public: typedef int (r ...

  5. Android实现圆形图片

     情景再现: 写Android程序也有一段时间了,今天突然被问怎么实现一个圆形图片,很多app图像是圆形的.但是用户上传的图像可不是圆的,所以问题就来了,需要我们代码实现圆形图片.但是大脑飞转想到第三 ...

  6. Amazon评论数据的预处理代码(Positive & Negative)

    Amazon评论数据的预处理代码,用于情感分析,代码改自 https://github.com/PaddlePaddle/Paddle/tree/develop/demo/quick_start/da ...

  7. Java8新特性——接口的默认方法和类方法

    Java8新增了接口的默认方法和类方法: 以前,接口里的方法要求全部是抽象方法,java8以后允许在接口里定义默认方法和类方法: 不同的是: 默认方法可以通过实现接口的类实例化的对象来调用,而类方法只 ...

  8. ueditor使用小结

    一.简介 ueditor是百度编辑器,官网地址:http://ueditor.baidu.com/website/ 完整的功能演示,可以参考:http://ueditor.baidu.com/webs ...

  9. centos mongodb cluster install 完全版

    分享一则用yum安装的mongodb初始化脚本. install_mongodb.sh会安装mongodb所需的基本环境. 配置副本集的时候会需要辅助文件hosts.conf. 说明:该示例为一主一丛 ...

  10. [转]搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...