Atlanta Custom Software Development 

 
   Search        Code/Page
 

User Login
Email

Password

 

Forgot the Password?
Services
» Web Development
» Maintenance
» Data Integration/BI
» Information Management
Programming
  Database
Automation
OS/Networking
Graphics
Links
Tools
» Regular Expr Tester
» Free Tools

Caveats of the CopyMemory API function

Total Hit ( 4111)

Rate this article:     Poor     Excellent 

 Submit Your Question/Comment about this article

Rating


 


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:

Click here to copy the following block
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:

Click here to copy the following block
' 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:

Click here to copy the following block
' 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:

Click here to copy the following block
If bytes > 0 Then
  CopyMemory source, dest, bytes
End If


Submitted By : Nayan Patel  (Member Since : 5/26/2004 12:23:06 PM)

Job Description : He is the moderator of this site and currently working as an independent consultant. He works with VB.net/ASP.net, SQL Server and other MS technologies. He is MCSD.net, MCDBA and MCSE. In his free time he likes to watch funny movies and doing oil painting.
View all (893) submissions by this author  (Birth Date : 7/14/1981 )


Home   |  Comment   |  Contact Us   |  Privacy Policy   |  Terms & Conditions   |  BlogsZappySys

© 2008 BinaryWorld LLC. All rights reserved.