2011-08-25 2 views
1

Visual Basic 6의 인터페이스 IUnknown에서 AddRef() 메서드를 호출하거나 객체 참조 카운터를 증가시키기 위해 해킹을 구현할 수 있습니까?VB6의 AddRef()

답변

2

VB6에서는 IUnknown 메서드에 직접 액세스 할 수 없다고 확신합니다. 그러나 해결 방법은 간단합니다. 모듈에이 선언을 추가

Set ReferenceHolder = someObject 

역으로 간단한 과제로

Dim ReferenceHolder As Variant 

을 그리고 AddRef에()가 호출받을하세요 릴리스를 얻을 수()

Set ReferenceHolder = Nothing 
호출하세요

이것은 정상적인 VB6 메모리 관리입니다.

3

당신은 당신이 할 수있는 인위적 (VB6에 의해 수행되는 자동 참조 카운팅 외부)가에 refrence 카운터를 증가하려는 경우 다음

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 

당신은 아마 반대를 구현해야합니다 이것도 공개하거나 당신이 일종의 메모리 누수가 나타납니다.

+0

그러나 VB는 Sub가 종료 될 때 Release()를 호출합니다. 그물 효과는 AddRef()를 한 번 호출 한 다음 Release()를 한 번 호출하는 것입니다. – MarkJ

+0

@MarkJ - CopyMemory가 커버 아래의 참조를 0으로 만들기 때문에 불가능하지 않습니다. 참조가 Nothing (null) 인 CopyMemory 이후. 복잡한 부모 - 자식 객체 그래프에서 순환 참조를 끊는 데이 기술을 사용했습니다. – tcarvin

+0

좋아, 나쁘다. +1 – MarkJ

관련 문제