본문 바로가기

Window Programming/VB

Object Pointer

varptr은 워낙에 많이 사용하셔서 사용법을 잘 아실텐데요
그에 비해 objptr은 사용할 필요성을 많이 못느끼기 때문에(상대적으로)
사용하시는 분도 별로 없고, 필요성도 별로 없게 느껴져서 사용법 찾기가 쉽진않습니다.

objptr이란 말 그대로 Object(범위가 꽤 넓죠? -_-;;)의 포인터를 받아올 수 있습니다.

이 포인터를 가지고 어따쓰냐..
다시 그 개체를 그대로 사용할 수 있습니다 (속성,메소드등)

간단히 표현해 보겠습니다.

lngobjptr = ObjPtr(Text1)       '<- Text1 이란 TextBox의 포인터를 얻어 Long형 변수에 저장합니다.

다시 그 개체를 접근할때에는
CopyMemory objPoint, lngObjptr, 4&      '<- 해당 포인터의 4바이트 주소를 개체에 집어넣어 사용합니다.


이때 주의하실 점은 copymemory를 사용할때 사용한 개체를
그대로 사용하게 되면.. 오류가 발생합니다.

따라서 그 개체를 새로이 다른 개체에 넘겨서 사용해야 합니다

set objControl = objPoint           '<- 개체넘기기
set objPoint = Nothing              '<- 메모리 해제


아래 예제는 한 폼내에 있는 TextBox(Text1)의 포인트를 얻어
새로이 txtNew라는 개체에 이식(?) 하는 예입니다.

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private m_lngObjptr     As Long

Private Sub Command1_Click()
    m_lngObjptr = ObjPtr(Text1)             '<- Text1의 objptr을 얻어옵니다.
End Sub

Private Sub Command2_Click()
    Dim objControl  As Object
    Dim txtNew      As TextBox
   
    'objectpoint 복사.
    CopyMemory objControl, m_lngObjptr, 4&      '<- 주소로 부터 개체를 얻오옵니다.
    Set txtNew = objControl                     '<- 개체를 새로 선언한 txtNew로 넘깁니다.  
    CopyMemory objControl, 0&, 4&               '<- 처음 개체를 해제 시킵니다. (중요)
   
    Debug.Print txtNew.Text                     '<- txtNew == TextBox1  이 됩니다..
End Sub


글재주가 없어.. 표현이 제대로 되었는지 모르겠네요..
objptr의 사용법은 위와 같습니다..

이걸 어따 써먹나 라고 생각하시는 분들이 계실텐데요..
좀더 적당한 예제를 찾으려다 보니.. 예제가 커질것 같아서
간략하게 설명하였습니다..

예제 첨부로 올립니다.