The Undocumented VBA Functions
CopyMemory
does not do the job alone.
Without the help of three undocumented
functions—VarPtr,
StrPtr, and ObjPtr, this
function would be useless. These functions return pointers to
variables, strings, and objects, respectively. One or more of these
functions usually gets the source or destination address that make up
the arguments to CopyMemory. All three of these
functions are located in the VB runtime DLL. Incidentally, all three
functions are internally mapped to the same function,
VarPtr, but you should use each function as it
was designed to be used or you will have some problems.
VarPtr
This
function is used to return a pointer to a variable. Not only does
this include variables of all native VB datatypes, but UDTs as well.
The function returns a Long value, which is the address of the
variable. Do not use this function to get pointers to Strings; you
will not get the value that you expect. Use
StrPtr instead.
The following code fragment uses VarPtr to
return the starting address of a user-defined type:
Dim ft As FILETIME Dim pft As Long pft = VarPtr(ft)
StrPtr
This
function is used exclusively to return pointers to Strings. Never use
VarPtr when you want the address of a String,
since it returns a pointer to the ANSI buffer VB creates when passing
Strings to API functions.
The following code fragment uses StrPtr to
return the starting address of a Visual Basic string:
Dim str As String str = "Hello, Kara!" Dim pstr As Long pstr = StrPtr(str) ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access