devxlogo

Caveats of the CopyMemory API function

Caveats of the CopyMemory API function

Here’s the correct declaration of the CopyMemory API function, which is so useful whenever you want to move a block of bytes between two memory locations:

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, _    source As Any, ByVal bytes As Long)

You should be aware of a few caveats of this statement:

  • When the source or the destination is a Visual Basic variable, it should be passed by reference, for example:
  •     ' copy an Integer into the low word of a Long variable    CopyMemory lngValue, intValue, 2

  • When the source or the destination is a memory locationyou should pass a 32-bit address by value, for example:
  •     ' Copy the contents of a Long variable to the memory location    ' pointed to by the "address" variable    Dim address As Long    ...    CopyMemory ByVal address, lngValue, 4

  • When the source or the destination is an array of numbers (or of UDTs that contains only numeric and fixed-length strings), you must pass the first element of the array by reference:
  •     ' Copy the first 1000 elements of array a() to b()    ' both arrays must be of the same type, and can't be objects     ' nor variable-length strings    CopyMemory b(0), a(0), 1000 * Len(a(0))

  • Passing zero as the last arguments crashes the application, therefore when the number of bytes to be transferred is dynamically evalutated at runtime, you should always check that it isn’t a null value, as in:
  • If bytes > 0 Then    CopyMemory source, dest, bytesEnd If

    See also  How HealthStream Learning Center Supports Healthcare Education and Compliance
    devxblackblue

    About Our Editorial Process

    At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

    See our full editorial policy.

    About Our Journalist