home *** CD-ROM | disk | FTP | other *** search
/ Dan Appleman's Visual Bas…s Guide to the Win32 API / Dan.Applmans.Visual.Basic.5.0.Programmers.Guide.To.The.Win32.API.1997.Ziff-Davis.Press.CD / VB5PG32.mdf / vbpg32 / samples5 / ch15 / ch15code.bas next >
Encoding:
BASIC Source File  |  1997-02-16  |  2.1 KB  |  69 lines

  1. Attribute VB_Name = "CH15CODE1"
  2. Option Explicit
  3. ' Copyright ⌐ 1997 by Desaware Inc. All Rights Reserved
  4.  
  5.  
  6. Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
  7. Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
  8. Declare Function GlobalHandle Lib "kernel32" (wMem As Any) As Long
  9. Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
  10. Declare Function GlobalReAlloc Lib "kernel32" (ByVal hMem As Long, ByVal dwBytes As Long, ByVal wFlags As Long) As Long
  11.  
  12. Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
  13. Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
  14. Declare Function GlobalFlags Lib "kernel32" (ByVal hMem As Long) As Long
  15.  
  16. ' Global Memory Flags
  17. Public Const GMEM_FIXED = &H0
  18. Public Const GMEM_MOVEABLE = &H2
  19. Public Const GMEM_NOCOMPACT = &H10
  20. Public Const GMEM_NODISCARD = &H20
  21. Public Const GMEM_ZEROINIT = &H40
  22. Public Const GMEM_MODIFY = &H80
  23. Public Const GMEM_DISCARDABLE = &H100
  24. Public Const GMEM_NOT_BANKED = &H1000
  25. Public Const GMEM_SHARE = &H2000
  26. Public Const GMEM_DDESHARE = &H2000
  27. Public Const GMEM_NOTIFY = &H4000
  28. Public Const GMEM_LOWER = GMEM_NOT_BANKED
  29. Public Const GMEM_VALID_FLAGS = &H7F72
  30. Public Const GMEM_INVALID_HANDLE = &H8000
  31.  
  32. Dim Glblhnd&    ' Share this variable among functions
  33. Dim di&
  34.  
  35. '
  36. ' Typical code to access memory in a buffer
  37. ' In this case, the buffer is used to hold 1000 x 256 byte
  38. ' fixed length strings.
  39. '
  40. Sub AllocArray()
  41. Dim GlblAddr&, GlblAddr2&
  42. Dim tstring As String * 256
  43.  
  44. Glblhnd& = GlobalAlloc(GMEM_ZEROINIT Or GMEM_MOVEABLE, CLng(1000 * 256))
  45.  
  46. If Glblhnd& = 0 Then
  47.     ' Perform appropriate error handling here. Do not
  48.     ' continue to the next line!
  49. End If
  50.  
  51. GlblAddr& = GlobalLock(Glblhnd&)
  52.  
  53. ' Here's how you retrieve one of the 256 byte strings
  54. ' from the huge memory block -
  55. ' In this case, the 500th entry
  56.  
  57. GlblAddr2& = GlblAddr& + 500 * 256
  58.  
  59. ' Now extract the string
  60. Call agCopyData(ByVal GlblAddr2&, ByVal tstring, 256)
  61.  
  62. di& = GlobalUnlock(Glblhnd&)
  63.  
  64. 'The memory block is still available.
  65.  
  66.  
  67. End Sub
  68.  
  69.