PB自动注册OCX控件
今天转了一些常用处理方法,经常用得到这些方法,自己以不想抄,只能COPY了。
方法一:
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自动注册OCX控件相关推荐
- 做VB的,经常注册和反注册OCX控件和DLL链
做VB的,经常注册和反注册OCX控件和DLL链 但是,每次都要 "开始"--"运行" --"regsvr32 C:\********\******.o ...
- 【c++】注册OCX控件
几种注册OCX控件的方法. 一. 如果是自己编写的程序,可以以管理员身份打开VS,编译通过后即注册成功. 二.在 控制面板->用户帐户和家庭安全->用户帐户->更改用户帐户控制设置- ...
- Win7 64位系统 注册 ocx控件
32位系统注册ocx就不谈了.网上一搜一大把.下面说下win7 64位 旗舰版下如果注册ocx控件 1.首先复制 XXXX.OCX文件到"C:\Windows\SysWOW64"目 ...
- 64位操作系统注册ocx控件失败,提示:模块加载失败请确保该二进制存储在指定路径中。
64位操作系统注册ocx控件失败,提示:模块加载失败请确保该二进制存储在指定路径中 我的解决方案: 1.找到位于windows下的syswow64文件夹下的cmd 2.并拷贝需注册的ocx文件到sys ...
- win10注册ocx控件的步骤(包含错误处理方法0x80040200)
最近在测试一个加载ocx控件的C++程序,运行前要先注册ocx控件. 1.用运行命令提示符或者PowerShell. 2.利用命令进入到ocx文件所在的目录下输入注册命令 注册命令:regsvr32 ...
- 自动注册MSComm控件
MSComm通信控件具有丰富的与串口通信密切相关的属性及事件,提供了一系列标准通信命令的接口,可以用它创建全双工的.事件驱动的.高效实用的通信程序.这里将介绍如何把用MSComm这个ActiveX控件 ...
- windows下注册ocx控件
VC编程经常要用到一些第三方xxx.ocx控件(具体到各个控件的名称),在用之前需要注册,总结了两种方法. 方法一: 1,对于32位系统将xxx.ocx拷贝到C:\Windows\System32,对 ...
- 自动注册activex控件
编写Delphi应用程序时,经常会遇到一些ActiveX控件[注:扩展名为OCX的控件或DLL的类型库],它们为应用程序的开发提供了简单的操作途径.然而,这些程序在发布的同时,面临ActiveX控件注 ...
- Win7 下如何注册OCX控件 。0x80040200错误。
一.先尝试右键以管理员身份运行cmd.如果不行继续下一步. 二.将cmd切换到用administrator账户进行开启,然后再用regsvr32方式进行控件注册 管理员权限运行命令提示符,输入 net ...
- Win7 注册ocx控件 “DllRegisterServer的调用失败,错误代码为0x80040200 ”
在 win7系统下, 在运行里运行 regsvr32 *.OCX 时, 出来"* .OCX 已加载,但对DllRegisterServer的调用失败,错误代码为0x80040200" ...
最新文章
- Redis 主从配置和参数详解
- git更改已提交作者用户名
- 旋转函数_一招搞定高中数学函数平移旋转问题
- 计算机网络知识培训计划,计算机网络管理员教学计划和大纲
- Hive 0.13 数据类型
- leetcode 303. 区域和检索 - 数组不可变
- 深度学习(03)-- CNN学习
- Visual Studio 2017版本15.9现在可用
- oracle数据库非归档模式数据备份和恢复
- android删除电池功能,Android教程:删除电池信息增加待机时间
- Ubuntu 出现apt-get: Package has no installation cand
- tensorflow版PSENet 文本检测模型训练和测试
- 计算机基础知识第三章测试,计计算机应用基础第三章测试题
- 系统登录界面(收集)
- 《史蒂夫·乔布斯传》——童年篇有感
- 面向Java程序员的Scala教程
- 爬取淘宝历史价格,通过请求接口,获取到数据
- 使用Java写文件不覆盖原有内容
- U盘文件变成快捷方式的解决方案
- Java Eclipse internal error Polling news feeds 解决方案