广州高深商电子技术有限公司 用户登录
用户注册 ......
首页 公告 收款机 抽奖机 来电管理 数据采集 台球灯控 软件开发 综合 会员下载 发货查询
公司首页
当前位置:首页>> 来电管理>> 二次开发 >>正文
在PB中使用OCX控件遇到的问题
gao在2009/8/12发表,被浏览4715
    最近在为高深商的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控件遇到…
【同类文章】
高深商GSM无线固话盒OC…
WIFI接口来电显示管理器…
新一代USB转COM口来电…
来电管理器故障排除的方法
在WIN7或Win8中注册…
计算机收发短信的OCX控件…
使用Java开发来电显示管…
开发来电显示及录音程序的C…
C#来电显示管理器开发示例…
使用C#的Socket开发…

广州高深商电子技术有限公司

地址:天河北路908号、高科大厦B座2704
电话:020-38259081、38258857
电子邮箱:gaoykosen@foxmail.com