在PB中使用OCX控件遇到的问题
来源:互联网 发布:linux下串口怎么测试 编辑:程序博客网 时间:2024/06/11 19:50
最近在为高深商的JD-2000系列来电管理器编写PB的使用实例,期间遇到了不少有关ActiveX控件在PB中的各种现象,先把我的经历写下来,希望对大家有所
启发。
关于OCX控件:这是一个专为高深商公司专为JD-2000系列来电管理器编写的,用于电话的来电显示、电话拨号、电话录音、语音播放以及电话按键的检测,
是实现电脑与电话连接的重要中间控件。在它的内部已经处理了与硬件的连接,它可以自动查找连接到电脑的所有来电设备,并保存它们的设置;而不必关心它
们连接在那一个端口、通讯的协议怎样、有几个设备等等。 要实现录音功能只要将控件设为相应的录音状态,它会按你的要求自动生成录音文件(wav),放到你
指定的位置。生成的文件可以使用目前大多数的媒体播放器播放,当然包括Windows自带的媒体播放器。需要播音时只要把录音文件的文件名交给控件,它就会在
你指定的线路上播出录音文件。不管哪一条线路有来电进来,控件都会以事件发生的形式通知你。当然电话振铃、摘机、挂机、按键等也会以事件发生的形式通
知你。
本文的重点不在控件的功能,而是在它在PB中使用时的各种有趣的现象。我们知道,很早版本的powerbuilder 就开始支持ActiveX控件了通常的使用方法是
1、先注册OCX控件,使用的办法是在命令窗口 输入 regsvr32.exe path/JDcomport.ocx
其中path是JDComport.ocx所在的路径,在这个路径下还应该包含一个控件要用到的动态链接库 qtintf.dll
2、在你的窗体里加入JDComponent控件:
方法是:在系统菜单选择Insert 选择 Control子菜单 选择 OLE... 进入 Insert Object 窗口
在Insert Object 窗口选择 Insert Control页
在Insert Control页 找到 JDComponent Control 并把它放到窗体上即可。
在大多数情况下,你应该是很顺利的,如果我也是这么顺利的话,也就不会有本文了,很不幸的是我到不了这一步,就在第2步的时候PB就发生了灾难性错误
,整个退出了。具体的情况是当我在Insert Object 窗口选择 Insert Control页是 系统提示 Out of Memory 选择 取消 系统退出。一开始我也怀疑是高深商的
JD-2000系列来电管理器的OCX控件的问题,将这个问题反映给他们的工程师,他们的工程师也很快对他们的控件进行了检测,也找不出什么问题来。这个控件在
其它编程工具里用的很好,并没有这种情况的发生。于是用google进行了搜索真还找到不少关于这个问题的文章和帖子。总结下来不外是:
1 这是PB的一个BUG
2 这是安装了某些与pb不兼容的软件
3 PB的兼容性不好
解决办法:
1 用比较高版本的PB 或者使用补丁
2 卸载某些软件
3 使用注册表清理工具清理注册表和实效软件
4 重装系统
以上办法部分或全部多是行得通的。为了得到出现问题的真正原因,我进行了一次实验,这个实验室是这样的:
1 安装一个纯的操作系统 这里用的是XP sp2,也就是出了操作系统和必要的驱动程序外什么也不安装。
2 安装pb6.5
3 注册控件
4 使用控件
用之前介绍的方法添加JDComponent控件,不会再有系统崩溃的现象出现,之后反复用PB7 PB8 PB9 PB10进行一样的测试,也不会出问题。由此可见,产生系
统崩溃的原因是由于某些OCX控件引起的。在其后的实验里进一步证明了这一点。在添加了控件的工程,回到有问题的操作系统时,正常使用这个控件是没有任何
问题的。我估计问题的产生是这样的,添加一个OLE控件到窗体时要打开 Insert Object窗口上的 Insert Control页,当这一页被激活时,系统试图去枚举所有
安装到系统的ActiveX控件,结果在尝试列出某个控件的某种属性时除了问题,导致了系统的崩溃。因此只你的应用程序没有用到有问题的控件就不会导致系统的
崩溃,而且也仅仅是发生在控件列表之时。在PB9.0后的版本里 System Tree 窗口有了Components的一页,我们通过这一页的目录树仍然可以使用我们添加
ActiveX控件到我们的程序里。
这个结果是否可以说PB就一点责任都没有吗?至少在我的电脑里PB10以上的版本就根本不会发生这样的问题,也许这就是PB的一个改进吧。
最后给个BP安装ActiveX控件的小结:
1、如果有得选择,最好用PB10以上的版本,9.0版本的也勉强可用
2、一定要用在9.0以下版本的,只好在一台干净的机器上添加上控件后再到你的机器里进编辑调试
- 在PB中使用OCX控件遇到的问题
- 在MFC中使用OCX控件遇到的一个问题
- 如何在PB的程序中注册用到的OCX控件
- 如何在PB的程序中注册用到的OCX控件
- 在VC中如何使用OCX控件
- 在VS2005中使用OCX控件
- 在VC中如何使用OCX控件
- 在delphi中ocx控件的安装
- 如何在PB中使用WINSOCK控件
- WINSOCK控件在PB中使用--聊天室
- 关于.ocx和.dll控件注册遇到的问题记录
- 问题:在网页中使用OCX,其EIDT控件不能响应backspace等键?
- 问题:在网页中使用OCX,其EIDT控件不能响应backspace等键?
- 将MDI封装成OCX之后,在IE中运行遇到的问题
- 调用OCX遇到的问题
- OCX控件在win7系统普通用户权限下,无法使用的问题。
- ActiveX (ocx)控件在客户端中使用
- PB自动注册OCX控件
- 变量的初始化及默认值
- Linux启动过程剖析
- 关于通过使用 NOLOCK 和 READPAST 解决数据库死锁问题
- 听不腻的阿密特
- [二合一]C#读取和导出EXCEL类库(可操作多个SHEET)
- 在PB中使用OCX控件遇到的问题
- 防范看不见的网页病毒
- 090811周二
- CLR管理异常的方式
- 也谈如何高效阅读源码
- Java中的static介绍
- 肉鸡的六种特征
- C# 读取Excel中指定的Sheet名称或索引
- [无情Dē温柔] 90后男孩的17-19岁三年生活