Visual Basic 에서 변수의 주소 가져오기 방법

기술 자료 번역 기술 자료 번역
기술 자료: 199824 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

메모리 주소 같은 변수에 대한 낮은 수준 정보를 얻기 위해 필요한 Visual Basic 프로그래머가 일반적이지 않은 것입니다. 그러나 이러한 정보가 필요로 하는 API 함수도 있습니다. 이 문서에서는 Visual Basic 프로그래머는 이 정보를 얻을 수 있도록 다음 Visual Basic 함수를 설명합니다.

VarPtr - 변수의 주소를 반환합니다.

VarPtrArray - 배열의 주소를 반환합니다.

StrPtr - 유니코드 문자열 버퍼의 주소를 반환합니다.

VarPtrStringArray - 주소의 문자열 배열 반환합니다.

ObjPtr - 개체 변수가 참조하는 인터페이스 포인터를 반환합니다.

추가 정보

경고 : 하나 이상의 다음 함수를; 이 문서에서 설명하는 VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. Microsoft 고객기술지원부에 이러한 함수는 지원되지 않습니다. VBA 설명서에 설명되어 있으며 "있는 그대로". 이 기술 문서에서 제공하는 Microsoft는 사용자가 사용할 수 있도록 Visual Basic의 이후 릴리스에서 보증하지 않습니다.

VarPtr

이 함수는 변수 또는 배열 요소의 주소를 가져올 수 있습니다. 해당 변수 이름이나 매개 변수로 배열 요소를 가져와 주소를 반환합니다. 그러나 다시 해당 잠금이 동적 배열 있습니다 할당할 수 Visual Basic에서 수 합니다 수 있도록 매우 신중하게 VarPtr 사용하여 배열 요소의 주소를 가져올 때 알고 있어야 합니다.

다음 예제에서는 변수 주소를 가져옵니다.

Dim lngVariableAddress as Long
Dim dblMyVariable as Double
lngVariableAddress = VarPtr(dblMyVariable)
				

이 예제에서는 배열의 네 번째 요소의 주소를 가져옵니다.:

Dim lngElementAddress as Long
Dim lngArrayOfLongs(9) as Long
' following will get address of 4th element
lngElementAddress = VarPtr(lngArrayOfLongs(3))
				

제한: VarPtr 함수는 배열의 주소를 가져올 수 없습니다. 자세한 내용은 VarPtrArray 함수를 참고하십시오.

VarPtrArray

Visual Basic에서는 배열 SAFEARRAYs가 저장됩니다. SAFEARRAY 구조의 주소를 가져오는 VarPtrArray 함수를 사용하여 합니다. 다음은 Visual Basic 5.0 및 Visual Basic 6.0 선언을 각각입니다.

Declare Function VarPtrArray Lib "msvbvm50.dll" Alias "VarPtr" _
(Var() as Any) As Long


Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" _
(Var() as Any) As Long
				

한 SAFEARRAY 주소를 가져오는 VarPtrArray 함수에 괄호 포함하여 SAFEARRAY 이름을 전달하십시오.

Dim lngSafeArrayAddress as Long
Dim lngArrayOfLongs(9) as Long
lngSafeArrayAddress = VarPtrArray(lngArrayOfLongs())
				

제한 사항: VarPtrArray 함수를 사용할 수 없습니다, 문자열 배열의 주소를 가져올 수 VBA 문자열 유니코드/ANSI 변환을 때문에. 문자열 배열을 VarPtrArray 사용하면 배열 임시 ANSI 복사본 주소의 메시지가 표시됩니다. 자세한 내용은 VarPtrStringArray 함수를 참고하십시오.

StrPtr

Visual Basic 문자열 BSTR 프로그램의 형식으로 저장됩니다. 문자열 형식의 변수에 있는 VarPtr 사용하면 문자열의 포인터로 포인터는 BSTR 주소의 메시지가 표시됩니다. 문자열 버퍼의 주소를 가져오는 StrPtr 함수를 사용하여 합니다. 이 함수는 문자열의 첫 번째 문자의 주소를 반환합니다. 고려해야 문자열 VBA 유니코드 형식으로 저장됩니다.

문자열의 첫 번째 문자의 주소를 가져오는 String 변수에 StrPtr 함수에 전달하십시오.

예제:

Dim lngCharAddress as Long
Dim strMyVariable as String
strMyVariable = "Some String"
lngCharAddress = StrPtr(strMyVariable)
				

API 호출에 UNIOCODE 문자열로 포인터를 전달할 할 때 이 함수를 사용합니다.

VarPtrStringArray

VarPtrStringArray는 문자열 배열의 주소를 가져옵니다. VBA 수행한 내장 유니코드/ANSI 변환을 피하는 선언에 형식 라이브러리에서 정의된 있습니다.

또는 다음.odl 파일에서 형식 라이브러리를 컴파일합니다 MIDL 컴파일러에 사용할 수 있습니다.

Visual Basic 6.0 해당 내용으로 VB6ptrlib.odl 라는 텍스트 파일을 만듭니다.

#define RTCALL _stdcall
[
uuid(C6799410-4431-11d2-A7F1-00A0C91110C3),
lcid (0), version(6.0), helpstring("VarPtrStringArray Support for VB6")
]
library PtrLib
{
importlib ("stdole2.tlb");
[dllname("msvbvm60.dll")]
module ArrayPtr
   {
   [entry("VarPtr")]
   long RTCALL VarPtrStringArray([in] SAFEARRAY (BSTR) *Ptr);
   }
}
				

Visual Basic 5.0 해당 내용으로 VB5ptrlib.odl 라는 텍스트 파일을 만듭니다.

#define RTCALL _stdcall
[
uuid(6E814F00-7439-11D2-98D2-00C04FAD90E7),
lcid (0), version(5.0), helpstring("VarPtrStringArray Support for VB5")
]
library PtrLib
{
importlib ("stdole2.tlb");
[dllname("msvbvm50.dll")]
module ArrayPtr
   {
   [entry("VarPtr")]
   long RTCALL VarPtrStringArray([in] SAFEARRAY (BSTR) *Ptr);
   }
}
				

다음 명령줄을 사용하여 Visual Basic 6.0 또는 Visual Basic 5.0 형식 라이브러리 (.tlb) 파일을 각각 만들려면 MIDL 컴파일러 사용하여 앞의.odl 파일을 컴파일합니다.

MIDL/t VB6ptrlib.odl MIDL/t VB5ptrlib.odl

프로젝트의 VarPtrStringArray 함수를 사용하여 방금 만든 형식 라이브러리에 대한 참조를 만들어야 합니다.

예제:

Dim MyArrayOfStrings(2) As String
Dim AddressOfArray As Long
MyArrayOfStrings(0)="AAA"
MyArrayOfStrings(1)="BBB"
AddressOfArray = VarPtrStringArray ( MyArrayOfStrings() )
				

ObjPtr

ObjPtr 매개 변수로 개체 변수 이름을 가져와 개체 변수가 참조하는 인터페이스 주소를 가져옵니다.

이 함수를 사용하여 한 시나리오를 개체의 컬렉션을 할 경우입니다. 키로 주소를 사용하여 개체를 인덱싱하여 컬렉션에 움직이는 사용하여 보다 빠른 개체에 대한 액세스를 얻을 수 있는 연산자입니다. 대부분의 경우 개체의 주소가 키로 사용할 때만 신뢰할 수 있는 것은 없습니다.

예제:

objCollection.Add MyObj1, CStr(ObjPtr(MyObj1))
...
objCollection.Remove CStr(ObjPtr(MyObj1))
				

속성

기술 자료: 199824 - 마지막 검토: 2004년 7월 1일 목요일 - 수정: 2.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
키워드:?
kbmt kbhowto KB199824 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com