dcsimg
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

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


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

WEBINAR:

On-Demand

Building the Right Environment to Support AI, Machine Learning and Deep Learning


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
    Thanks for your registration, follow us on our social networks to keep up-to-date