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"在内存。在内存无法将"写入"。

属性

文章编号: 192653 - 最后修改: 2014年2月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
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 192653
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com