Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB4/32,VB5,VB6
Expertise: Advanced
Jun 12, 1999

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, bytes
    End If
    
    Francesco Balena
     
    Comment and Contribute

     

     

     

     

     


    (Maximum characters: 1200). You have 1200 characters left.

     

     

    Sitemap