AddRef () в VB6 - PullRequest
       61

AddRef () в VB6

1 голос
/ 25 августа 2011

возможно ли вызвать метод AddRef () из интерфейса IUnknown в Visual Basic 6 или реализовать какой-то взлом для увеличения счетчика ссылок на объекты?

Ответы [ 2 ]

3 голосов
/ 25 августа 2011

Если вы пытаетесь искусственно увеличить счетчик рефракций (вне автоматического подсчета ссылок, который выполняется 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

Возможно, вам потребуется реализоватьнаоборот, чтобы освободить, или вы получите утечку памяти в некотором роде.

2 голосов
/ 25 августа 2011

Я вполне уверен, что VB6 не поддерживает прямой доступ к методам IUnknown. Но обходной путь прост. Добавить эту декларацию в модуль:

  Dim ReferenceHolder As Variant

И затем вызывать AddRef () с простым присваиванием

  Set ReferenceHolder = someObject

Обратно, получить Release () для вызова с

  Set ReferenceHolder = Nothing

Это нормальное управление памятью VB6 на работе.

...