【问题标题】:Object Already Loaded Error (360) Using .Net ActiveX control in VB6 project在 VB6 项目中使用 .Net ActiveX 控件的对象已加载错误 (360)
【发布时间】:2013-10-14 09:22:14
【问题描述】:

我使用 Forms Interop Toolkit 创建了一个 .Net ActiveX 控件。

当我在 VB6 项目中使用该控件时,我偶尔会收到以下错误:

对象已加载 (360)

这没有多大意义,因为此错误仅涉及在运行时加载的对象数组,但我的控件不在控件数组中,只是位于表单上。

【问题讨论】:

  • 只是想回答你的问题,但你已经想通了:)
  • @lordkain - 是的,我在 SO 上找不到任何对此的参考,所以我决定将其添加为知识库文章
  • 自我回答并不能消除对问题的要求。它必须被正确记录,至少是一个 repro sn-p 和异常的堆栈跟踪。显然调用 GC.Collect() 是一种应该始终避免的技巧,您的回答也没有真正解释问题的原因。如果你没有正确记录,你得到答案的几率会大大降低。
  • @HansPassant - 堆栈跟踪与此处无关,因为在 VB6 项目中引发了错误。我只发布了一个解决方案(我不知道为什么会这样!)。如果对为什么会发生这种情况有更好的建议/解释,我会很乐意支持/接受它们。

标签: .net user-controls vb6 activex winforms-interop


【解决方案1】:

经过大量搜索,我遇到了this site,它给出了解决方案:

在 Disposed 后强制对控件进行垃圾回收:

在以下方法中(由 Forms Interop Toolkit 模板生成):

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

调用了对象的 Dispose。添加一行强制垃圾回收:

ElseIf m.Msg = WM_DESTROY AndAlso Not Me.IsDisposed AndAlso Not Me.Disposing Then
    'Used to ensure that VB6 will cleanup control properly
    Me.Dispose()
    System.GC.Collect() '<-- Add this line
End If

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    相关资源
    最近更新 更多