O'Reilly logo

VB Shell Programming by J.P. Hamilton

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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 Sub

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

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required