【问题标题】:Can't open project in Visual Basic 6无法在 Visual Basic 6 中打开项目
【发布时间】:2019-06-27 10:11:53
【问题描述】:

我的一个朋友给了我一个编译良好的测试程序,挑战是编辑源代码。我知道这个程序是用 VB6 编写的,我得到了 vb-decompiler。我有很多表格(.frm 文件)和一个 project.vbp 。现在,我从非官方来源下载了适用于 Windows 的 VB6,当我导入我的项目时,每个表单都出现内存不足错误。我忽略了这个错误,当导入完成时,它会给出一个关于日志文件的消息 -

Line 77: Cannot load control txtServer.
Line 85: Cannot load control txtUID.
Line 93: Cannot load control txtPwd.
Line 101: Cannot load control txtFTPPath.
Line 109: Cannot load control txtFTPSharedFolder.
Line 117: Cannot load control txtPort.
Line 222: Cannot load control txtType.
Line 266: Cannot load control txtPath.
Line 274: Cannot load control txtSharedFolder.
Line 310: Cannot load control cmdSave.

我尝试通过 Visual Basic 2008 Express 将我的 vb6 更新到 vb.net,但出现错误

upgrade failed: application has caused an exception

我现在该怎么办? 编辑 : 我读了frm文件。我打开了 frm 文件,看到它有类似的行 -

begin xyz.txtServer

现在 xyz 是应用程序的名称,而 txtServer 是问题中所述的日志文件中的错误。

编辑 2: 我有了新的发展。我打开了 frm 文件并知道具有 - begin VB.(some Command) 的行运行良好,但行 - begin xyz2000(some command) 给出了错误。很明显是dll错误。 frm 不调用任何 xyz2000.dll 。我在给我的软件中没有得到任何 xyz2000.dll。那么这个xyz2000是从哪里来的呢?

【问题讨论】:

  • VB.NET 并不是 VB6 的真正继承者,它是一种完全不同的语言和编程环境,有很多表面上的相似之处。因此,这可能无法快速解决您遇到的问题。
  • 我认为您可能应该找到一些更有成效的事情来处理您的生活。这个友好的挑战会浪费很多时间
  • @DaveInCaz VB.NET 语言本身几乎是 VB 的超集。巨大的差异在于库,尤其是 VB.NET 的 WinForms 和 VB 的 Ruby 表单库。
  • @R.J.Dunnill Ruby?

标签: vb.net vb6 vb6-migration


【解决方案1】:

“无法加载”错误很可能是由于 DLL(或 OCX 文件,一种 DLL)引用丢失或至少未在您的开发计算机上注册。 VB6 不是静态链接语言,甚至不是真正动态链接的语言,而是 DLL 引用都是在运行时基于 COM 发现的——本质上意味着 DLL 通常必须在 Windows 中集中注册。

进一步诊断具体问题:

  • 在文本编辑器中查看 FRM 文件。定义控件“txtServer”的文件及其类型。类型名称可以指示需要哪个 DLL 来提供控件。

  • 查看 FRM 文件的顶部,您应该会看到列出 Object = "..." 引用的行。这些也表明所需的 DLL / OCX 文件。

  • 查看 .VBP 文件,您会看到类似的 ObjectReference 行。

(如果您将这些项目的一些示例添加到问题中,人们可能会提供更多帮助。)

【讨论】:

  • 朋友发来的程序里有近十个.dll文件。我只是试图集中注册它们,但只有一半被注册。其他人给出了错误,例如找不到有效的入口点或版本错误在 32 位和 64 位 regsvr32 中不兼容。我想真正主要的已经注册了。
  • @BhavyaGupta 某些 DLL 可能不是 COM 依赖项,因此不需要注册。即,COM DLL 可以有一个非 COM DLL 作为依赖项。 VB6 也可以直接使用这样的 DLL(但不能用于控件)。因此,根据这些错误,您可能会没事。 VB6 是 32 位的,因此它始终是您应该使用的 32 位 regsvr32,AFAIK。并且您必须确保以管理员身份运行 regsvr32(您可能已经这样做了)。
  • 我应该把源代码发给你编译。任何帮助将不胜感激。
  • @BhavyaGupta 这似乎不是一个编码问题,而是一个开发环境问题。您需要逐个解决每个错误。
  • 我有新进展。我打开了 frm 文件并知道具有 - begin VB.(some Command) 的行运行良好,但行 - begin xyz2000(some command) 给出了错误。很明显是dll错误。 frm 不调用任何 xyz2000.dll 。我在给我的软件中没有得到任何 xyz2000.dll。那么这个xyz2000是从哪里来的呢?
【解决方案2】:

您绝对应该仔细检查.vbp 文件。 ReferenceObject 语句 GUID 必须出现在注册表的 HKEY_CLASSES_ROOT\TypeLib 键中。

这些是您向regsvr32 注册的组件。对于无法注册的dll's,必须将它们复制到 32 位应用程序可访问的位置。最佳位置是:

在 64 位 Windows 上

%SystemRoot%\SysWOW64

在 32 位 Windows 上

%SystemRoot%\System32

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多