【问题标题】:Cannot Debug Visual Basic 6 ActiveX Component On 64-bit OS无法在 64 位操作系统上调试 Visual Basic 6 ActiveX 组件
【发布时间】:2012-05-02 00:11:18
【问题描述】:

情况可能听起来有点奇怪,但我必须发挥我所拥有的。 有一个 Win2003 64 位服务器操作系统和一个使用 Visual Studio 6 编写的旧版应用程序。该应用程序由两部分组成:用 VB6 编写的 ActiveX 组件和使用它们的 C++ 代码。

我需要调试组件的代码。我在服务器上安装了 Visual Studio 6,并且能够单步执行组件的代码。然后我得到以下情况:

  1. C++ 代码在需要实例化组件 A 之前一直有效。
  2. 我们切换到 VB6 并开始调试组件的 A VB6 代码。
  3. 在一开始,组件 A 创建了一个由组件 B 公开的类 C 的实例。在此步骤中,VB6 调试器显示标题为 "OLEDB32.DLL" 的错误消息和以下文本: “加载资源 DLL C:\Program Files (x86)\Common Files\System\Ole DB\OLEDB32R.DLL 失败”

附加信息:C 类初始化的最后一步是使用 OLEDB 提供程序打开与 SQL 服务器的 ADO 连接。

对于如何解决此问题的任何想法,我将不胜感激。 提前致谢。

【问题讨论】:

    标签: vb6 oledb 64-bit


    【解决方案1】:

    VB6 调试器以有时有点不稳定而闻名,我不确定 64 位操作系统是否支持它。

    还有其他一些调试 VB6 的选项。

    • 您可以尝试在调试 C++ 的同时在 Visual C++ 6 调试器中调试 VB6。将 VB6 编译为带有符号的本机代码(创建 PDB 文件)。然后你应该能够从 C++ 直接进入 VB6 并且仍然可以调试。我以前做过(不是在 64 位上)。这是 Microsoft knowledgebase article 使用 C++ 5 执行此操作 - 我认为它在 C++ 6 中大致相同。这是 info 使用 Visual C++ 2008 执行此操作(!)
    • 或者您可以尝试在Windbg 中运行该程序,这是一个来自Microsoft 的免费独立调试器。再次将您的 VB6 编译为带有符号(PDB 文件)的本机代码,您将能够在 Windbg 中调试您的 VB6。您还应该能够同时调试 C++。
      • 这里有一个 Microsoft 人员的 2006 blog post 关于将 Windbg 与 VB6 结合使用,以及另一位 Microsoft VB 人员的 2004 blog post 对 Windbg 进行了简要介绍。

    【讨论】:

      【解决方案2】:

      MDAC 像这样注册 ADO/OLEDB 类:%CommonProgramFiles%\System\Ole DB\sqloledb.dll

      检查您的流程环境是否以某种方式损坏。如果您使用重启管理器(当您的应用程序崩溃时它会重新启动)不会恢复环境。我们在Sub Main

          If LenB(Environ$("CommonProgramFiles")) = 0 Then
              Call SetEnvironmentVariable("CommonProgramFiles", pvGetSpecialFolder(ucsOdtProgramFilesCommon))
          End If
          If LenB(Environ$("CommonProgramFiles(x86)")) = 0 Then
              Call SetEnvironmentVariable("CommonProgramFiles(x86)", pvGetSpecialFolder(ucsOdtProgramFilesCommon))
          End If
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-01
        • 2011-03-10
        • 1970-01-01
        • 1970-01-01
        • 2015-01-19
        • 1970-01-01
        • 2017-06-01
        • 1970-01-01
        相关资源
        最近更新 更多