为了扩展应用程序的功能,许多系统都使用了或多或少的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);
endif;
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”执行参数是为了隐藏注册成功消息框。
分享到:
相关推荐
3. **使用方法**:设置好OLE控件后,可以通过调用控件的`Navigate`方法加载指定的URL。例如: ```pb ole_control.Navigate("http://www.example.com") ``` 还可以监听`DataChanged`事件,以检测网页是否已加载...
PB 插入OLE控件内存溢出的终极解决法 PB 中插入 OLE 控件时,应用程序自动关闭的现象经常出现,这是由于 PB 中插入 OLE 控件时,会搜索那些控件可用,并且在PB 中显示出来,但是在搜索控件时,如果发现控件冲突,PB...
在 64 位系统下,PowerBuilder 搜索控件的位置为:注册表中的"HKEY_CLASSES_ROOT/CLSID"和“HKEY_CLASSES_ROOT/CLSID/Wow6432Node”下的子项(为 DLL、OCX 文件注册信息)。 解决思路: 1. 首先,我们需要找到冲突...
SWT 使用 OLE 函数调用com控件的资料 SWT 使用 OLE 函数调用com控件的资料SWT 使用 OLE 函数调用com控件的资料SWT 使用 OLE 函数调用com控件的资料 SWT 使用 OLE 函数调用com控件的资料
在PB11.5(PowerBuilder 11.5)中,嵌入OLE控件Web Browser是一种常见的技术,用于在应用程序内部展示网页内容并实现与网页的交互。本主题将详细探讨如何使用此功能,以及如何通过HTML页面的链接来控制窗口的打开。 ...
1. **安装和注册Barcodex控件**:首先,你需要下载并安装Barcodex控件的库文件,然后在PB环境中注册该控件。这通常涉及到将控件的动态链接库(DLL)文件添加到PB的系统路径,或者在PB的“ActiveX”设置中手动注册。 ...
从描述中可以看出,LabVIEW控件通过ActiveX技术提供,ActiveX是一种组件对象模型,允许软件组件在网络上进行交互,可以使用OCX(OLE Control Extension)文件注册ActiveX控件。VC++可以使用ActiveX控件,这是微软组件...
PowerBuilder提供了强大的OLE控件支持,使得我们可以轻松地将微软的Web浏览器控件集成到我们的应用中。 #### 二、PowerBuilder中调用浏览器控件的步骤 1. **添加OLE控件** - 在PowerBuilder中打开你想要添加...
### C#调用OCX控件的方法 在C#中调用OCX控件是一种常见的技术,尤其是在需要利用已有组件功能的时候。本文将详细介绍如何在C#中注册、导入并使用OCX控件。 #### 一、注册OCX控件 在使用OCX控件之前,首先需要将其...
三、网页测试与OCX控件注册 在网页上使用OCX控件前,必须确保控件已在用户的系统上正确注册。这通常通过在命令行运行`regsvr32`命令完成,例如: ``` regsvr32 path\to\ocx_file.ocx ``` 如果不再需要该控件,可以...
5. **注册控件**:使用`regsvr32`命令重新注册OLE控件,或者通过PB的自身注册功能进行注册。 6. **错误日志分析**:收集PB崩溃时产生的错误日志,根据日志信息定位问题所在。 7. **论坛求助**:如果问题复杂,可以...
首先,理解OCX控件:OCX是Microsoft在其Visual Basic 3.0版本中引入的一种组件技术,它是ActiveX的一部分,可以看作是增强版的OLE控件。OCX控件可以在多种支持ActiveX的环境中使用,如VB、VC++、Delphi等,提供诸如...
本主题聚焦于如何在JavaScript中调用由VC6开发的OCX控件,并响应来自OCX控件的回调。这种技术允许Web页面与本地系统进行深度集成,实现丰富的功能。 首先,我们需要理解什么是OCX控件。OCX(OLE Control Extension...
描述中提到,"本程序简单描述ocx在网页中的调用方式",意味着它将涵盖创建、注册OCX控件,以及在HTML或JavaScript中引用和操作这些控件的基本步骤。对于Web开发者,特别是那些不熟悉COM和ActiveX技术的人来说,这是...
这个错误通常是因为在Ole4.0之后,调用OCX控件的方法时,系统会检查是否允许调用。如果控件没有正确初始化或通过持久存储接口加载,COleControl.IsInvokeAllowed(DISPID)方法会返回FALSE,从而引发异常。解决这个...
OCX(旧称OLE控件)是基于COM(Component Object Model)的,它允许开发者创建小型、自包含的代码块,可以嵌入到其他应用程序中。OCX控件通常包含用户界面元素,如按钮、文本框等,也可以包含更复杂的功能,如数据库...
控件的原理是基于 ActiveX 技术的,ActiveX 技术是 OLE 技术的发展,定义了一种可重用组件技术的规范。 在实现控件时,需要定义控件的属性和方法,并且定义控件可引发的事件。控件可以在容器中运行,因此从运行的...
本篇将详细讲解如何在C#的`RichEditBox`中调用`OLE`来插入`ActiveX`对象。 首先,理解`ActiveX`是微软提出的一种技术,它允许开发者创建可以在不同Windows应用程序间共享的组件。这些组件可以是控件、服务、文档等...
6. **PowerBuilder调用**:在PowerBuilder中,可以通过OLE容器控件来调用COM组件。首先,在PowerBuilder的数据窗口中添加一个OLE容器,然后在运行时动态创建和实例化COM控件,通过接口调用其方法,设置或获取属性值...
除了MScomm控件,该工具还支持注册其他的OCX(OLE控件)文件,OCX是ActiveX控件的一种文件格式,包含了可重用的用户界面元素和控件。 注册OCX文件通常涉及到以下步骤: 1. 打开命令提示符,通常以管理员身份运行。 ...