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 на работе.