AddRef() в VB6

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

2 ответа

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

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

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

  Dim ReferenceHolder As Variant

А затем получить AddRef() для вызова с простым присваиванием

  Set ReferenceHolder = someObject

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

  Set ReferenceHolder = Nothing

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

Другие вопросы по тегам