調用OLE控件如何註冊
来源:互联网 发布:淘宝上卖家中心在哪里 编辑:程序博客网 时间:2024/06/10 07:10
为了扩展应用程序的功能,许多系统都使用了或多或少的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”执行参数是为了隐藏注册成功消息框。
- 調用OLE控件如何註冊
- 如何使MFC程序支持OLE控件
- 如何在OLE控件中使用OLE_COLOR数据类型
- Ole与ActiveX控件
- OLE控件笔记
- powerbuilder8 ole控件无法使用!
- pb自动注册ole控件
- OLE控件和API函数
- OLE控件与API函数
- OLE如何显示文档内容!
- pb調用 ole處理
- OLE控件在Direct3D中的渲染方法
- 解决OLE控件失去焦点的办法
- Ole控件的事件辅助类
- 浅谈PB中使用ole控件
- Ole控件的事件辅助类
- OLE 控件怎么插入到richEdit中
- OLE
- C#类 成员的初始化顺序
- css
- oracle 客户端sys登陆服务器
- C#学习之Delegate
- uCOS-II2.86 移植的一点心得
- 調用OLE控件如何註冊
- 设置控件背景色和字体颜色!!mfc
- 你需要脚本么?
- [转载] Linux下的多进程编程初步
- 【性能跟踪】btrace学习三--bBTrace Annotation注解
- 过度使用C++模板(overdoing C++ templates)
- 转载:如何学好UNIX和C语言
- iobase membase mepbase的区别
- [转载] 关于lib 和 dll 的作用