首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何升级VB6设计组件?

如何升级VB6设计组件?
EN

Stack Overflow用户
提问于 2014-08-19 14:16:57
回答 1查看 817关注 0票数 0

所以我最近把这个遗留的项目放在了我的腿上。此应用程序以随机间隔崩溃,并且似乎存在内存泄漏。首先,我不是VB6开发人员。我对语言和IDE几乎一无所知。我觉得这两件事都很令人难以忍受。尽管如此,我还是要尝试为这个软件做一个修正。这个问题与MSVBVM60.DLL的组装有关。经过深入挖掘,我发现了这个错误。以前使用过该项目的开发人员使用了一些用户控件,形成了一个名为SimpleChart的包。我曾经发现过这个网站,但它只是一个页面,表明他们不再积极开发,甚至不再向组件出售许可证。在那里或任何地方都没有关于它的使用的文件。我用Glowcode对应用程序进行了描述,以检测出一所大学认为可能隐藏在应用程序中的潜在内存泄漏。对于我在Glowcode中看到的任何东西,我几乎一无所知,我设法让它在运行时对代码进行保守的评估,以查找泄漏。奇怪的是,这使我指向了那个SimpleChart DLL,并且在调用堆栈的另一端是MSVBVM60 DLL。我发现我们在本地存储了几个SimpleChart组件的安装程序,并且发现我是最新版本后面的几个版本。我很快抓起了安装程序,并将它安装到我的VB6开发计算机上。在那里,我试图通过Project -> reference和Project -> components菜单用升级的程序集替换引用的程序集。这两种方法都导致错误:

不能移除控制或引用;正在使用中。

因此,根据我从这个错误中收集到的信息,以及我发现的与它相关的稀疏帖子,控件是由某个地方引用的,需要在升级之前删除。那么问题是,在VB6中升级控件的版本,而不必重新构建所有与所述控件相关的逻辑和所有内容,是否有可能?我可以删除控件(如果我知道表单上的哪些控件来自SimpleChart),但这不意味着我必须重新构建该组件的所有事件处理程序和所有内容吗?在我看来,必须有一种方法来升级组件,而不需要取消您投入的每一盎司工作。

我曾经尝试过简单地修改vbp项目以删除引用,在读取Object=的行中,后面跟着一些垃圾,然后是DLL的路径。这删除了引用,但破坏了表单。在那里,我添加了对新程序集的引用,保存并重新启动了IDE,希望控件能够在引用替换程序集的情况下修复自己。没有这样的运气。

如果有人能帮我,请尽量细说。我的背景是java和.NET开发。大多是爪哇。我对编程有相当多的了解,但实际上对VB6一无所知。

EventViewer消息的一个示例:

代码语言:javascript
复制
Faulting application name: PTL Stats.exe, version: 2.4.0.2, time stamp: 0x537baff2
Faulting module name: MSVBVM60.DLL, version: 6.0.98.15, time stamp: 0x4a5bda6c
Exception code: 0xc0000005
Fault offset: 0x0004c8b1
Faulting process id: 0x620
Faulting application start time: 0x01cfb540858788c7
Faulting application path: C:\ptl\Stats\PTL Stats.exe
Faulting module path: C:\windows\system32\MSVBVM60.DLL
Report Id: 96228ed9-224f-11e4-9c03-386077d55741
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-20 09:48:52

如果更新是一个小更新(相同的COM is ),那么升级应该是无缝的,就像COM系统所保证的那样。

如果这是一个包含新类型库/COM接口的主要更新,那么它将需要一些手动修补,因为没有本机“替换此控件”命令。

主要步骤包括:

  1. 将新控件添加到项目中
  2. 注意旧控件的属性,并从窗体中删除它们。
  3. 添加同名的新控件并重新应用任何自定义属性 所有代码都将不受此操作的影响,因此仍将引用新控件。
  4. 对每个实例重复2和3次
  5. 从项目中移除控件。
  6. 修复任何编译错误和更改的事件,这些事件不可避免地会随着接口更改而发生。
  7. 测试
  8. 重复7

或者,由于表单文件是文本文件,您可以只执行一次步骤2和步骤3,查看新控件的progid是什么,在其他情况下手动替换它。

如果您有源代码管理或原始代码的备份,它将使重新应用任何自定义属性更容易。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25385765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档