Forms Interop Toolkit を使用して .Net ActiveX コントロールを作成しました。
VB6 プロジェクトでコントロールを使用すると、次のエラーが発生することがあります。
オブジェクトはすでにロードされています (360)。
このエラーは実行時に読み込まれるオブジェクト配列のみを参照するため、これはあまり意味がありませんが、私のコントロールはコントロール配列内になく、フォーム上に配置されているだけです。
Forms Interop Toolkit を使用して .Net ActiveX コントロールを作成しました。
VB6 プロジェクトでコントロールを使用すると、次のエラーが発生することがあります。
オブジェクトはすでにロードされています (360)。
このエラーは実行時に読み込まれるオブジェクト配列のみを参照するため、これはあまり意味がありませんが、私のコントロールはコントロール配列内になく、フォーム上に配置されているだけです。
多くの検索の後、解決策を提供するこのサイトに出くわしました:
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