Generate GUID

UDF below generates 128-bit GUID and returns it as a string in the format 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.

MSDN: $SAMPLECODE$
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

FUNCTION GenerateGUID
	LOCAL lcGUID, lcStrucGUID, lnSize
	lcStrucGUID = SPACE (16)
	lcGUID      = SPACE (78)
	lnSize      = LEN(lcGUID)/2

	IF CoCreateGuid(@lcStrucGUID) <> 0
	   RETURN ""
	ENDIF

	IF StringFromGUID2(lcStrucGUID, @lcGuid, lnSize) = 0
	  RETURN ""
	ENDIF

	* VFP 8.0 and later
	RETURN STREXTRACT(STRCONV(lcGUID,6), "{", "}")
	* Previous versions
	*RETURN CHRTRAN(STRCONV(lcGUID, 6), "{}" + CHR(0), "")
ENDFUNC

FUNCTION CoCreateGuid(tcStrucGUID)
	DECLARE INTEGER CoCreateGuid IN Ole32.dll STRING @cGUIDStruc
	RETURN CoCreateGuid(@tcStrucGUID)
ENDFUNC	


FUNCTION StringFromGUID2(tcStrucGUID, tcGuid, tnSize)
	DECLARE INTEGER StringFromGUID2 IN Ole32.dll STRING cGUIDStruc, STRING @cGUID, LONG nSize
	RETURN StringFromGUID2(tcStrucGUID, @tcGuid, tnSize)
ENDFUNC	

Alternatively, WSH object for constructing type libraries for scriptlets (Scriptlet.Typelib) can be used
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11

FUNCTION GenerateGUID
	LOCAL loObj
	loObj = CREATEOBJECT("Scriptlet.TypeLib")
	* VFP 8.0 and later
	RETURN STREXTRACT(loObj.GUID, "{", "}")
	* Previous versions
	*RETURN CHRTRAN(loObj.GUID, "{}", "")
ENDFUNC

Comments

Thanks Sergey--very useful information, as always.