问:我写的系统中带了OCX控件,当系统编译后发行时必须带上该OCX控件,但在用户的机子上必须注册该OCX控件才能使用,否则程序运行会出错,请问用什么方法注册该OCX控件?
</P><P>答:提供以下几种方法供参考:
1、在Windows命令行或DOS下运行:regsvr32 ocxname.OCX
2、用Install Shield 做安装程序时,在里面选“Self-Registered”,安装程序将 自动注册。
3、在PB程序中调用regsvr32实现,安装程序只需负责将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"
//假设OCX文件在Windows系统目录下,在PB应用(Application)的Open事件编写如下代码:
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"执行参数是为了隐藏注册成功消息框。
(此种方法由张涛提供)
4、在PB应用程序中注册:
函数声明:
Function long DllRegisterServer() Library "ocxname.OCX"
调用:
LONG ll_RC
ll_RC = DllRegisterServer()
1、在Windows命令行或DOS下运行:regsvr32 ocxname.OCX
2、用Install Shield 做安装程序时,在里面选“Self-Registered”,安装程序将 自动注册。
3、在PB程序中调用regsvr32实现,安装程序只需负责将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"
//假设OCX文件在Windows系统目录下,在PB应用(Application)的Open事件编写如下代码:
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"执行参数是为了隐藏注册成功消息框。
(此种方法由张涛提供)
4、在PB应用程序中注册:
函数声明:
Function long DllRegisterServer() Library "ocxname.OCX"
调用:
LONG ll_RC
ll_RC = DllRegisterServer()