vbAccelerator - Contents of code file: GUIDGenerator5.cls

VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "GUIDGenerator"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
'Author:    Dion Wiggins
'Purpose:   A simple component that generates a unique GUID value.
'           A GUID is a 16-byte field used as a unique identifier.
'           A GUID, also knows as a CLSID and IID a 16-byte identifier that is
 guaranteed to be unique.
'           This allows developers across the world can independently develop
 and deploy their software
'           without fear of accidental collision with software written by
 others.
'           This same GUID value can be used not only for software components,
 but for unique keys in
'           databases and any other application that requires a unique value.
'           COM frequently must map GUIDs (IIDs and CLSIDs) to some arbitrarily
 large set of other values.
'
'Copyright: Copyright (C) 1999, Control-Shift Inc. All Rights Reserved.
'Notes:     You are free to use and modify this code, but not to distribute
 modified versions
'           of the ActiveX DLL with the same filename and/or ProgIds.
'           If you have made changes which you think are beneficial, or have
 bug reports, then you
'           can email me (dionwiggins@hotmail.com) and I will do my utmost to
 get the a new version
'           published.
'           You can freely distribute this code, but you must distribute them
 it in its original state
'           and particularly keep the disclaimer information. Notification
 would be greatly appreciated!
'           You can freely distribute any compiled code or any products you
 build using the code.
'           If you wish to distribute the source code files by any other means
 (i.e. if you want to
'           include it on a CD or any other software media) then the EXPRESS
 PERMISSION of the
'           Control-Shift Inc. is REQUIRED.
Option Explicit

Private Type GUID
     Data1 As Long
     Data2 As Long
     Data3 As Long
     Data4(8) As Byte
End Type

Private Declare Function CoCreateGuid Lib "ole32.dll" ( _
     pguid As GUID) As Long

Private Declare Function StringFromGUID2 Lib "ole32.dll" ( _
     rguid As Any, _
     ByVal lpstrClsId As Long, _
     ByVal cbMax As Long) As Long

'Author:    Dion Wiggins
'Purpose:   Creates a GUID
'Notes:
'Inputs:
'   - strRemoveChars    The characters to remove from the GUID (usually the {}-
 characters)
'History
'Date           Author          Description
'1 Jun 1999     Dion Wiggins    Created
Public Function CreateGUID( _
    Optional strRemoveChars As String = "{}-") As String
Dim udtGUID As GUID
Dim strGUID As String
Dim bytGUID() As Byte
Dim lngLen As Long
Dim lngRetVal As Long
Dim lngPos As Long

'Initialize
lngLen = 40
bytGUID = String(lngLen, 0)

'Create the GUID
CoCreateGuid udtGUID

'Convert the structure into a displayable string
lngRetVal = StringFromGUID2(udtGUID, VarPtr(bytGUID(0)), lngLen)
strGUID = bytGUID
If (Asc(Mid$(strGUID, lngRetVal, 1)) = 0) Then
    lngRetVal = lngRetVal - 1
End If

'Trim the trailing characters
strGUID = Left$(strGUID, lngRetVal)

'Remove the unwanted characters
For lngPos = 1 To Len(strRemoveChars)
    strGUID = Replace(strGUID, Mid(strRemoveChars, lngPos, 1), "")
Next

CreateGUID = strGUID
End Function

' author: Steve.  VB5 equivalent of VB6 replace function
Private Function Replace(ByRef sThis As String, ByVal sToReplace As String,
 ByVal sReplaceWith As String) As String
Dim iPos As Long
Dim iNextPos As Long
Dim lLen As Long

   lLen = Len(sToReplace)
   iPos = 1
   iNextPos = InStr(sThis, sToReplace)
   Do While Not (iNextPos = 0)
      Replace = Replace & Mid$(sThis, iPos, iNextPos - iPos) & sReplaceWith
      iPos = iNextPos + lLen
      iNextPos = InStr(iPos, sThis, sToReplace)
   Loop
   If iPos < Len(sThis) Then
      Replace = Replace & Mid$(sThis, iPos)
   End If
End Function