Some CopyMemory Examples
When
looking at the following examples, note the distinction between
passing an argument by reference (ByRef) versus
passing an argument by value (ByVal). Remember,
when you pass an argument ByVal, you are passing
the actual value. When you pass an argument ByRef
(also designated by the absence of the ByRef
keyword, since this is Visual Basic’s default method of
parameter passing), you are really passing a pointer to that value.
Keep this in mind as you look at the following examples.
Example 1
Private Type SomeUDT
Field1 As String * 256
Field2 As String * 256
Field3 As String * 256
End Type
Public Sub CopyUDT( )
Dim udtA As SomeUDT 'This is a user-defined type
Dim udtB As SomeUDT
udtA.Field1 = "Bill Purvis"
udtA.Field2 = "Chris Mercier"
udtA.Field3 = "Kelly Christopher"
CopyMemory udtB, udtA, Len(udtB)
End SubThis example shows a nice way to a copy a user-defined type. This is much more efficient than doing the following:
udtB.Field1 = udtA.Field1 udtB.Field2 = udtA.Field2 udtB.Field3 = udtA.Field3
Examine the call to CopyMemory for a moment. Notice that both UDTs are passed by reference. In fact, UDTs will always be passed by reference. This is enforced by the compiler itself. So, essentially, there is nothing to remember here. If you forget that UDTs are always passed by reference, the compiler will remind you. Also, note that this example works because the members of the UDT are fixed-length strings. If they were not, chances are this code would cause ...
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