【问题标题】:VB6 update/reload a CTL user control used in my projectVB6 更新/重新加载我项目中使用的 CTL 用户控件
【发布时间】:2018-10-29 10:55:58
【问题描述】:

我有一个使用 CTL 用户控件的旧 VB6 项目。 我可以在工具箱上看到用户控件。

如果我在项目中新建一个窗体,并尝试添加用户控件,它会失败,因为“加载 DLL 时出错”并且无法添加控件。

但是如果我创建一个新项目,我可以将用户控件添加到项目中,然后在新表单中使用它没有问题。

第一个项目有什么问题,我不能在其表单中使用用户控件?

同理,打开已经使用了用户控件的项目的窗体,该控件是无法识别的。 似乎与原始项目中用户控件的错误路径/引用有关。

我尝试再次添加用户控件,但它告诉我已经存在同名的用户控件。

如果我尝试退出用户控件以再次加载它,我将无法退出它,因为它正在项目中使用。我能做什么?

感谢您的帮助。

【问题讨论】:

  • 项目可能缺少参考。
  • CTL 中是否有任何代码引用其他 DLL 中的类?例如,这可以通过 CreateObject 调用。

标签: vb6 user-controls ctl


【解决方案1】:

在文本编辑器中打开您的 CTL 文件(记事本也可以)。

在顶部它可能有类似于以下的行:

VERSION 5.00
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFlxGrd.ocx"

可能有一个或多个Object= 行。

这些行中至少有一个文件可能丢失或未在计算机上注册。

【讨论】:

  • DavelnCaz - 非常感谢您的回答。我搜索了 Object,但在 CTL 文件中没有找到任何 Object 行。我找到了这两行: Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long |和 |私有声明函数 ReleaseCapture Lib "user32" () 只要。但没有对象线。
  • 提供更多信息,我的 CTL 文件以这些行开头: VERSION 5.00 Begin VB.UserControl XButton 我在 CTL 代码中找不到任何“OCX”。
  • Declare Function 可能会导致这样的错误 - 但 user32.dll 不能从正常工作的计算机中丢失,因此这似乎不太可能。
【解决方案2】:

不要问我为什么,但成功的唯一方法就是从头开始。 我从一台安装了 Visual Studio SP6 的干净的 Windows XP 笔记本电脑开始。

在尝试加载和编译项目时,出现了同样的错误。 如果我尝试绘制我的用户控件的新实例,则相同:加载 DLL 时出错 如果我尝试打开一个包含我的用户控件实例的表单,情况也是如此:表单中无法识别该控件(空白区域)。

所以,我开始了一个新的空 ActiveX DLL 项目。 逐步添加所有对象,我可以加载所有对象(有一些小问题),但最终我可以编译项目。

添加对象的顺序很重要:引用和组件、用户控件、模块和类、设计器,最后是表单。

我试图编译每一步以找出问题的原因,并了解下一个必须添加的对象。 但不明白为什么它现在有效。 还是谢谢!

编辑 2018-11-07:

我在初始项目中发现了一种变通方法,可以毫无问题地使用 CTL 用户控件,并且编译该项目时不会出现任何错误消息。我想在这里分享它以帮助任何有类似问题的人。

我不知道为什么,也许任何人都可以给出解释,但是如果我打开项目,然后打开名为 frmDate 的设计器(见图),从那一刻起我可以编译项目,并在任何窗体上使用用户控件。 怎么回事??

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    相关资源
    最近更新 更多