FIX: 8 或更多 ActiveX dll 中经过编译的项目导致错误

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 192653
本文已归档。它按“原样”提供,并且不再更新。
症状
Visual Basic 项目组包含至少为八个 ActiveX DLL 项目和一个标准 EXE 项目。在标准 EXE 项目创建,并释放 ActiveX DLL 文件。项目组被编译为 DLL 和 EXE 文件。运行该 EXE 文件。

第一次创建并发布 ActiveX DLL 的文件时该程序成功运行。但是,创建并发布 ActiveX DLL 的文件在第二次应用程序错误发生并显示以下消息:
在指令"0x6602c2c5 引用"0x010b008c"在内存。在内存无法将"写入"。
状态
Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中的错误。

在 Visual Studio 6.0 Service Pack 3 中,此缺陷已得到纠正。有关 Visual Studio 的服务包的详细信息,请参阅 Microsoft 知识库中下面的文章:
194022信息: Visual Studio 6.0 服务包、 内容,位置,为什么

194295HOWTO: 确定安装了 Visual Studio 6.0 服务包
更多信息
仅在已编译的项目运行在 vba IDE 之外时,将出现该 bug。当您通过在 vba IDE 中运行项目时,则该 bug 将不会发生。

此部分向您说明了如何创建一个演示 bug 行为的示例项目。该部分假定您熟悉创建 ActiveX DLL 项目、 标准 EXE 项目、 项目组和到可执行文件编译这些文件。

重现行为的步骤

示例项目中包含将在标准 EXE 项目中使用的八个 ActiveX DLL 项目。然后,在标准 EXE 项目被编译为可执行文件。然后,来演示该 bug 行为运行可执行文件。

若要创建 8 个的 ActiveX DLL 项目,请执行下列操作:
  1. 在 Visual Basic 中启动一个新的 ActiveX DLL 项目。默认情况下创建 Class1。
  2. 将下面的代码复制到代码窗口的将 Class1 的:
    Option Explicit      Public Sub DoNothing()      End Sub					
  3. 将此类模块保存为 Class1.cls 和 Project1.vbp 为此项目。
  4. 将另一个 ActiveX DLL 项目添加到项目组中。默认情况下创建 Class1。删除此项目的 Class1 的类模块并添加 Class1 的类模块为 Project1.vbp 到新的 ActiveX DLL 创建项目。
  5. 将此项目另存为 Project2.vbp。
  6. 重复步骤 4 和 5,将使用相同的 Class1 类模块的六个其他 ActiveX DLL 项目添加到项目组。将这些项目另存为通过 Project8.vbp Project3.vbp。

    您创建了项目组与保存为以 Project8.vbp Project1.vbp 的八个 ActiveX DLL 项目。每个 ActiveX DLL 项目引用中 Project1.vbp 创建相同的 Class1 类模块。

    下一步是创建使用八个 ActiveX DLL 项目的标准 EXE 项目。
要创建标准 EXE 项目,请执行以下操作:
  1. 将一个新的标准 EXE 项目添加到同一项目组包含八个 ActiveX DLL 项目中。默认情况下创建 Form1。
  2. 向 Form1 中添加命令按钮。
  3. 将下面的代码复制到 Form1 窗体的代码窗口:
          Option Explicit      Private Sub Command1_Click()         Dim o(8) As Object         Dim i As Integer         Dim strProgID As String         For i = 1 To 8            strProgID = "Project" & i & ".Class1"            Set o(i) = CreateObject(strProgID)            o(i).donothing            Set o(i) = Nothing         Next         MsgBox "Done"      End Sub					
  4. 将项目另存为 Project9.vbp。
  5. 将 Project9.vbp 设置为启动项目。在项目浏览器中用鼠标右键单击 Project9.vbp,然后单击设为开始安装。Project9.vbp 将出现在工程资源管理器中以粗体显示。
  6. 按 F5 键启动 IDE 中运行该项目。单击 Form1 几次该 Command1 按钮,并注意它工作正常。
  7. 编译项目组。
  8. 运行在 IDE 之外 Project9.exe。将显示 Form1 窗体。单击 Command1。将出现一个消息框。单击确定以关闭消息框。 请再次单击 Command1。请注意应用程序错误发生,并显示以下消息框:
    在指令"0x6602c2c5 引用"0x010b008c"在内存。在内存无法将"写入"。
COM ActiveX InProc

属性

文章 ID:192653 - 上次审阅时间:02/22/2014 20:09:22 - 修订版本: 2.1

Microsoft Visual Basic 6.0 学习版, Microsoft Visual Basic 6.0 专业版, Microsoft Visual Basic Enterprise Edition for Windows 6.0

  • kbnosurvey kbarchive kbmt kbbug kbdll kbfix kbide kbvs600sp1fix kbvs600sp2fix kbvs600sp3fix KB192653 KbMtzh
反馈