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) ...

Get VB Shell Programming now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.