pb自动注册ole控件

方法一: 
 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控件,布布扣,bubuko.com

时间: 2024-07-28 12:34:32

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

03.插入ole控件,insert contrl 崩溃

pb ole 调用网页显示; _ 找不到Microsoft WebBrowser,在insert contrl里 -------------------pb一点击insert contrl就崩溃 按照参考②里的,反注册mstscax.dll报错,(dll名在导出的reg文件里是二进制,在regedit里看到的): 模块" mstscax.dll"已加载,但对 DllUnregisterServer 的调用失败,错误代码为 0x80040153. 把注册表里的这个项目(权限问题见参考)直

【c++】注册OCX控件

几种注册OCX控件的方法. 一. 如果是自己编写的程序,可以以管理员身份打开VS,编译通过后即注册成功. 二.在 控制面板->用户帐户和家庭安全->用户帐户->更改用户帐户控制设置->设为从不通知(可能会有危险) 三.附件->命令提示符,输入对应的OCX进行注册 输入  regsvr32  name.ocx 四.使用.bat文件进行注册.新建txt文档,在文档中输入要注册的OCX的名字,regsvr32  .\name.ocx把txt后缀改为.bat,双 击文件自动进行注册.

在cocos2d-js实现自动绑定cocostudioUI控件与事件

一.起因 在客户端游戏开发中最让人恶心的工作就是UI相关的东西,虽然有了像cocostudio这样的可视化工具,但界面中有大量需要由代码访问的控件的时候,需要写太多重复的代码例如: //加载UI配置文件 var root = ccs.uiReader.widgetFromJsonFile("res/cocosui/UIEditorTest/UIButton_Editor/UIButton_Editor_1.json"); this._mainNode.addChild(root); /

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

原文:OLE控件在Direct3D中的渲染方法 Windows上的图形绘制是基于GDI的, 而Direct3D并不是, 所以, 要在3D窗口中显示一些Windows中的控件会有很多问题 那么, 有什么办法让GDI绘制的内容在3D中显示出来?反正都是图像, 总有办法实现的嘛! 前段时间在研究浏览器在游戏中的嵌入, 基本的思路就是在后台打开一个浏览窗口, 然后把它显示的内容拷贝到一张纹理上, 再把纹理在D3D中绘制出来, 至于事件处理就要另做文章了. 所以, 其它的Windows里的GDI绘制的东西

Regsvr32注册ActiveX控件

命令:Regsvr32 XX.dll 注册ActiveX控件 Regsvr32命令参数:/u 卸载ActiveX控件/s 注册成功后不显示操作成功信息框/c 控制台输出/I 调用DllInstall安装函数并将可选的参数[cmdline]传给它,当使用 /u时调用卸载函数/n 不调用 DllRegisterServer,该参数必须和 /I 一起使用 底层C++编写的COM组件dll,可以通过这样注册,然后在前台web端,可以通过object对象来调用dll中的方法. <object id="

win7的64位系统注册ocx控件

 win7的64位系统注册ocx控件 简介:前两天系统出问题了,导致开发环境很多插件需要重装, 当我针对winform的几个错误,安装控件解决时,就出现了错误, 始终装不上,如图: 解决方案: 1.首先复制 XXXX.OCX文件到"C:\Windows\SysWOW64"目录. (XXXX.OCX 是你准备注册的OCX控件) 2.在C:\Windows\sysWOW64 目录中找到cmd.exe的程序 3.右键单击该程序选择"管理员身份运行" 4.进入cmd D

在cocos2d-js实现自动绑定cocostudioUI控件与事件(二)

前两天有个刚学习使用cocos2d-js的同事问我,怎么实现一个功能:点击一个按钮UI显示计数加1,按住不放UI计数就不停的加. 这个功能不就是个长按事件吗?我给他描述了下实现长按事件的思路: 1. 在控件touchBegan时,使用 一次性定时器scheduleOnce传入touchLong函数,设定1秒后执行. 2.  touchLong触发时,开启schedule传入addOnce函数(ui显示计数加1),设定每0.1秒执行一次. 3.  在touchEnded时执行unschedule函

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

Qt5 UI信号.槽自动连接的控件重名 来源 http://blog.csdn.net/goldenhawking/article/details/51865909 对Qt5稍有熟悉的童鞋都知道信号.槽的自动连接机制.该机制使得qt designer 设计的UI中包含的控件,可以不通过显式connect,直接和cpp中的相应槽相关联.该机制的详细文章见 http://doc.qt.io/qt-5/designer-using-a-ui-file.html#automatic-connection

PB打开ole控件IE浏览器版本问题_指定Webbrowser控件所用IE内核版本(转)

如果电脑上安装了IE8或者之后版本的IE浏览器,Webbrowser控件会使用IE7兼容模式来显示网页内容.解决方法是在注册表中为你的进程指定引用IE的版本号. 比如我的程序叫做a.exe 对于32位程序 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION 对于64位程序 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432No