无法在64位操作系统上调试Visual Basic 6 ActiveX组件

时间:2010-06-02 14:02:16

标签: vb6 oledb 64-bit

情况可能听起来有点奇怪,但我必须玩我所拥有的。 有一个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”
  4. 附加信息:C类初始化的最后一步是使用OLEDB提供程序打开与SQL Server的ADO连接。

    我很感激如何解决这个问题。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

VB6调试器的声誉有时有点不稳定,我不确定它是否曾在64位操作系统上得到支持。

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

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

答案 1 :(得分:0)

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