Visual Basic 6의 인터페이스 IUnknown에서 AddRef() 메서드를 호출하거나 객체 참조 카운터를 증가시키기 위해 해킹을 구현할 수 있습니까?VB6의 AddRef()
1
A
답변
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
당신은 아마 반대를 구현해야합니다 이것도 공개하거나 당신이 일종의 메모리 누수가 나타납니다.
관련 문제
- 1. AddRef()가없는 EnvDTE의 CoCreateInstance?
- 2. VB6의 InternetCheckConnection이 false를 반환합니다.
- 3. vb6의 음성 인식
- 4. vb6의 쿼리 결과가 잘못되었습니다.
- 5. vb6의 문서 템플릿은 무엇입니까?
- 6. VB6의 VSFlexgrid 라이센스 문제
- 7. VB6의 비관적 잠금 검색
- 8. VB6의 빈 Datagrid 문제
- 9. VB6의 가짜 컴파일 문제
- 10. VB6의 다중 생성자?
- 11. # VB6의 'StrConv'와 같습니다.
- 12. VB6의 인터페이스 제한
- 13. VB6의 코드 줄 제한
- 14. VB6의 자동 완성 (인텔리가) 갑자기
- 15. VB6의 어떤 파일이 재배포 가능합니까?
- 16. VB6의 SHEmptyRecycleBin이 아무 것도하지 않습니다.
- 17. VB6의 원격 통신 포트에 인쇄
- 18. VB6의 문자열에서 후행 "-"문자를 제거하십시오.
- 19. vb6의 계층화 된 서비스 공급자
- 20. _variant_t에 스마트 포인터를 할당하려면 수동 AddRef()가 필요합니까?
- 21. QueryInterface() 구현 내에서 AddRef()를 직접 호출하지 않는 이유가 있습니까?
- 22. VB6의 C#에서 정적 인 정적?
- 23. VB6의 코드를 통해 Access 2000 데이터베이스 업데이트
- 24. vb6의 ComponentOne 컨트롤에서 발생할 수있는 문제
- 25. vb6의 DataGrid에서 셀을 업데이트 할 수 없습니다.
- 26. VB.Net에서 VB6의 DLL/TLB를 사용하는 방법
- 27. VB6의 부모 대화 상자에 대한 액세스 제어
- 28. VB6의 ActiveX 컨트롤에서 현재 요청 경로 가져 오기
- 29. 어떻게 소스 코드를 VB6의 하위 폴더에 넣을 수 있습니까?
- 30. VB6의 WebBrowser 컨트롤과 Windows 통합 인증 자격 증명 사용
그러나 VB는 Sub가 종료 될 때 Release()를 호출합니다. 그물 효과는 AddRef()를 한 번 호출 한 다음 Release()를 한 번 호출하는 것입니다. – MarkJ
@MarkJ - CopyMemory가 커버 아래의 참조를 0으로 만들기 때문에 불가능하지 않습니다. 참조가 Nothing (null) 인 CopyMemory 이후. 복잡한 부모 - 자식 객체 그래프에서 순환 참조를 끊는 데이 기술을 사용했습니다. – tcarvin
좋아, 나쁘다. +1 – MarkJ