如何升级VB6 Design组件?

时间:2014-08-19 14:16:58

标签: dll reference user-controls vb6

所以我最近把这个遗留项目放在了我的膝盖上。此应用程序以随机​​间隔崩溃,并且似乎有内存泄漏。首先,我不是VB6开发人员。我对语言或IDE几乎一无所知。我发现这两个都令人难以忍受:(。但是,我必须尝试修复此软件。问题与程序集MSVBVM60.DLL有关。在挖掘后我发现了这个bug。开发人员曾经使用过这个项目之前曾经使用过一些用户控件来形成一个名为SimpleChart的软件包。我找到了一次网站,但它只是一个页面,表明他们不再积极开发,甚至不再向组件出售许可证。没有关于其使用的文档我已经使用Glowcode对应用程序进行了分析,以检测大学曾认为可能存在于应用程序中的潜在内存泄漏。我对Glowcode中看到的任何内容都不了解,我设法得到了它在运行时对代码进行了保守的评估,以发现泄漏。这奇怪地指向了我的SimpleChart DLL,并且进一步向上调用堆栈是MSVBVM60 DLL。我发现我们已经存储了几个Simp的安装程序leChart组件在本地,发现我是最新版本背后的几个版本。我迅速抓住了安装程序,并将其安装到我的VB6开发机器上。从那里我试图通过项目 - >更新引用的程序集与升级的程序集。参考和项目 - >组件菜单。它们都导致错误:

无法删除控制或参考;在使用中。

所以从我从这个错误中收集到的内容,以及我发现的与它相关的稀疏帖子,控件被某个地方的某个地方引用,需要在升级之前删除。那么问题是,甚至可以升级VB6中的控件版本而不必重建所有逻辑以及与所述控件相关的所有内容?我可以删除控件(好吧,如果我知道表单上的哪些控件来自SimpleChart,我可以这样做),但这并不意味着我必须重建所有事件处理程序和所有组件的所有内容?在我看来,必须有一种方法来升级组件而不撤消你放入其中的每一项工作。

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

如果有人可以帮助我,请尽量做到详细。我的背景是java和.NET开发。主要是java。我对编程有很多了解,但对VB6几乎一无所知。

EventViewer消息的一个示例:

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

1 个答案:

答案 0 :(得分:3)

如果更新是次要更新(相同的COM ID),则升级应该是COM系统保证的无缝更新。

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

主要步骤包括:

  1. 将新控件添加到项目中
  2. 请注意旧控件的属性,并从表单中删除它们
  3. 添加具有相同名称的新控件并重新应用任何自定义属性
    所有代码都将保持不变,因此仍将引用新控件
  4. 为每个实例重复2和3
  5. 从项目中删除控件
  6. 修复因界面更改而不可避免地发生的任何编译错误和更改事件
  7. 测试
  8. 重复7
  9. 或者,由于表单文件是文本文件,您可以执行第2步和第3步,然后查看新控件的编写内容,并在每次出现时手动替换它。

    如果您拥有源代码管理或原始代码的备份,则可以更轻松地重新应用任何自定义属性。

相关问题