方法一:
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控件的更多相关文章
-
【VS开发】windows注册ActiveX控件
ActiveX控件是一个动态链接库,是作为基于COM服务器进行操作的,并且可以嵌入在包容器宿主应用程序中,ActiveX控件的前身就是OLE控件.由于ActiveX控件与开发平台无关,因此,在一种编程 ...
-
用.net installshield打包程序时注册第三方控件
制作打包程序时如果用到外部控件需要按以下方式操作: 1.将控件及控件所用到的所有DLL加入打包程序. 2.将控件的Register由vsdrfDoNotRegister改为vsdrfCOMSelfRe ...
-
用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件
用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件用C#编写ActiveX控件 开发浏览器控件这是本控件开发完成后的一个简单应用.我们可以利用它以本地文件夹为单位来批量更新服务器的 ...
-
jquery 自动补全控件(支持IE6)待整理
自动补全控件(兼容IE6):http://bassistance.de/ download地址:http://jquery.bassistance.de/autocomplete/jquery.aut ...
-
windows下注册ocx控件
OCX 是对象类别扩充组件(Object Linking and Embedding (OLE) Control Extension):是可执行的文件的一种,但不可直接被执行: 是 ocx 控件的扩展 ...
-
Regsvr32注册ActiveX控件
命令:Regsvr32 XX.dll 注册ActiveX控件 Regsvr32命令参数:/u 卸载ActiveX控件/s 注册成功后不显示操作成功信息框/c 控制台输出/I 调用DllInstall安 ...
-
如何在Web.config中注册用户控件和自定义控件
问题: 在ASP.NET 的早先版本里,开发人员通过在页面的顶部添加 指令来引入和使用自定义服务器控件和用户控件时,象这样: <%@ Register TagPrefix="scott ...
-
【转载】OLE控件在Direct3D中的渲染方法
原文:OLE控件在Direct3D中的渲染方法 Windows上的图形绘制是基于GDI的, 而Direct3D并不是, 所以, 要在3D窗口中显示一些Windows中的控件会有很多问题 那么, 有什么 ...
-
Qt5 UI信号、槽自动连接的控件重名
Qt5 UI信号.槽自动连接的控件重名 来源 http://blog.csdn.net/goldenhawking/article/details/51865909 对Qt5稍有熟悉的童鞋都知道信号. ...
随机推荐
-
VS2013预览版安装 体验截图
支持与msdn帐号链接: 不一样的团队管理: 新建项目:
-
最近遇到的jsfl开发问题总结
最近在用jsfl开发一套把MUGEN角色动画和数据导入flash的脚本.遇到不少问题,这里备忘一下: 1.绘制笔刷和填充的问题 更换填充和笔刷需要用如下的代码 而不是随便设置一下doc的属性 var ...
-
Restful是什么,SOAP Webservice和RESTful Webservice
首先,应该怀着这样一种心态来学习Restful——Restful你可以将其理解一种软件架构风格,并且诠释了Http协议的设计初衷,所以不要把他理解的那么神秘,Restful风格有好处,当然也是有坏处的 ...
-
MyQL修改用户名命令、密码
====================================================== update user set host = '%' where user = 'root ...
-
Rekit
本文转自:http://rekit.js.org/docs/get-started.html Get started The easiest way to try out Rekit is creat ...
-
Android 自定义弹出框带EditText
EditText 布局页面 edittext_ownername_dialog.xml: <?xml version="1.0" encoding="utf-8&q ...
-
Django框架(三)
六.Django的视图层 视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML ...
-
剑指offer——合并两个排序的链表——对象、引用和赋值初接触
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然,我们需要合成后的链表满足单调不减规则. 先公布结果: /* public class ListNode { int val; List ...
-
Codeforces 600E. Lomsat gelral(Dsu on tree学习)
题目链接:http://codeforces.com/problemset/problem/600/E n个点的有根树,以1为根,每个点有一种颜色.我们称一种颜色占领了一个子树当且仅当没有其他颜色在这 ...
-
Centos常用快捷键
终端快捷键 tab=补全 ctrl+a=开始位置 ctrl+e=最后位置 ctrl+k=删除此处至末尾所有内容 ctrl+u=删除此处至开始所有内容 ctrl+d=删除当前字母 ctrl+w=删除此 ...