欲穷千里目 更上一层楼 海内存知己 天涯若比邻

VB6程序运行错误Run-time error 339: Tabctl32.ocx...

上一篇 / 下一篇  2008-10-06 15:17:33 / 个人分类:vb6

运行错误Run-timeerror339: Tabctl32.ocx的解决办法


[问题]

    最近一段时间与教研室的各位老师在做一个山东省一级OFFICE模拟软件时,前面的开发工作一切顺利,却在后面的安装运行阶段出现了一个似乎有些莫名其妙的错误,完整的错误提示如下:

Run-time error '339':
Component 'Tabcl32.ocx' or one of its dependencies no correctly registered: a fiel is missing or invalid


[简要分析]
    乍从字面错误来看,是控件Tabcl32.ocx有关的问题。我所使用的安装软件是Inno setup,这是个轻量级的安装程序,特别适合于制作共享软件。因为你想开发共享软件的话,如果使用像INSTALL SHIELD这样的大型重量级安装软件(当然功能也更为齐全)的话,自然可能导致版权的问题,特别如果是你想在国外发行你的软件的话。所以,经网友推荐使用了轻量级的Inno setup。这个安装软件无论对于VC或是VB,或是DELPHI开发的软件的安装制作都支持得很好,仅是许多操作需要手工进行。正是这一点导致了上述错误。

    因为使用VB6开发软件时,VB本身需要各种各样的控件(.OCX),而这些控件在系统安装文件的后期制作过程中自然需要考虑在内,有些是必须由安装程序复制到目标机器的。但是,我们开发的这款软件,没有用到特别的OCX控件,更没有涉及到复杂的第三方控件。怎么会出现上述错误呢?

    在学校机房中在所有安装有VB6的XP机器上运行安装软件并实际使用软件没有任何问题。但是,有些老师在没有安装VB6的XP机上
运行安装软件后,在具体进行系统后出现上述错误提示。

[第一次试验]
    根据上述错误提示,我在Inno setup的脚本中添加了如下语句:

[Files]
Source: C:\WINDOWS\system32\tabctl32.ocx; DestDir: {sys}; Flags: regserver restartreplace sharedfile;

结果错误依然如上,???

[第二...N次试验]
 无奈之下,只好打开了google。根据老思路,先使用中文GOOGLE,也找到许多类似的疑问,但是都没有理想(或者说是可行的方案)。在无奈之下,只好又进入了英文GOOGLE,输入几乎全部上述错误提示,终于在如下地址找到了一种解决办法:
http://www.vbforums.com/archive/index.php/t-483366.html

    于是,我重新修改了在Inno setup的脚本,并结合自己的系统进一步添加了如下完整的语句:
Source: C:\WINDOWS\system32\richtx32.ocx; DestDir: {sys}; Flags: regserver restartreplace sharedfile;
Source: C:\WINDOWS\system32\comdlg32.ocx; DestDir: {sys}; Flags: regserver restartreplace sharedfile;
Source: C:\WINDOWS\system32\mscomctl.ocx; DestDir: {sys}; Flags: regserver restartreplace sharedfile;
Source: C:\WINDOWS\system32\tabctl32.ocx; DestDir: {sys}; Flags: regserver restartreplace sharedfile;

重新编译上述脚本,生成新的安装文件SETUP.EXE。一切OK了!!!



[截图欣赏]

    下面是我主持开发的拙作的一个典型快照:


唉,真是苦尽甘来,这真是个硬道理啊!

TAG: 339 error run-time vb6

引用 删除 问问   /   2010-01-05 10:04:25
看不懂。。。
杨晓东的个人空间 引用 删除 ntyangxd   /   2008-10-08 12:35:25
VB6的话,有一个打包工具的,你先用这个工具打包不更好?反过来说,就算你觉得不好看,换另一个工具,你可以考虑打包时用的文件啊!
passport80的个人空间 引用 删除 passport80   /   2008-10-07 15:32:58
其实简单点来说就是该控件依赖的组件没有注册,导致该控件也不能注册。VB好像有个自带的工具查看组件关联的,有这个事情就好办了。
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar