1

Visual Basic 6 でインターフェイス IUnknown からメソッド AddRef() を呼び出すか、オブジェクト参照カウンターをインクリメントするためのハックを実装することは可能ですか?

4

2 に答える 2

3

(VB6 によって行われる自動参照カウントの外で) 参照カウンターを人為的にインクリメントしようとしている場合は、次のことができます。

Public Sub AddOneToRefCount(target As Object)

    Dim tempObj As Object
    Set tempObj = target 'VB6 calls AddRef for you here

    Call CopyMemory(ByVal ObjPtr(tempObj), 0&, 4&) 'trick VB into not calling Release

End Sub

リリースするには、おそらくこれの逆も実装する必要があります。そうしないと、ある種のメモリリークが発生します。

于 2011-08-25T12:50:11.747 に答える
2

VB6 が IUnknown メソッドへの直接アクセスをサポートしていないことは確かです。しかし、回避策は簡単です。この宣言をモジュールに追加します。

  Dim ReferenceHolder As Variant

そして、 AddRef() を取得して、単純な代入で呼び出されます

  Set ReferenceHolder = someObject

逆に、Release() を取得して呼び出す

  Set ReferenceHolder = Nothing

これは、作業中の通常の VB6 メモリ管理です。

于 2011-08-25T11:47:46.957 に答える