0

Forms Interop Toolkit を使用して .Net ActiveX コントロールを作成しました。

VB6 プロジェクトでコントロールを使用すると、次のエラーが発生することがあります。

オブジェクトはすでにロードされています (360)

このエラーは実行時に読み込まれるオブジェクト配列のみを参照するため、これはあまり意味がありませんが、私のコントロールはコントロール配列内になく、フォーム上に配置されているだけです。

4

1 に答える 1

0

多くの検索の後、解決策を提供するこのサイトに出くわしました:

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
于 2013-10-14T09:22:14.420 に答える