View in color | License | Download script | History | Other scripts by: dmcavenue |
30-Apr 10:50 UTC
[0.071] 11.772k
[0.071] 11.772k
guid.rREBOL [
Title: "UUID Generation Example via Windows SDK"
Date: 10-Sep-2005
Version: 0.1
File: %guid.r
Author: "David McAvenue"
Purpose: {Command only example of interfacing to Windows SDK to generat UUIDs. Trivial given heavy lifting by others in Rebol community. Acknowledgements to all.}
History: [
0.1 [10-Sep-2005 "First Issue" "DMcA"]
]
library: [
level: 'intermediate
platform: [Windows]
type: [how-to]
domain: 'win-api
product: 'Command
tested-under: 'Windows
support: none
license: none
see-also: none
]
]
; make-elements function to dynamically build the byte array previously
; developed by Gregg Irwin with credits to some others
make-elements: func [name count type /local result][
if not word? type [type: type?/word type]
result: copy "^/"
repeat i count [
append result join name [i " [" type "]" newline]
]
to block! result
]
; load the lib
rpclib.dll: load/library %Rpcrt4.dll
; declare the structs and similtaneously variables to be used
; UUID struct
GUID: make struct! GUID-def: compose/deep [
Data1 [integer!] ; DWORD
Data2 [short] ; SHORT
Data3 [short] ; SHORT
(make-elements 'Data4 8 #"@") ; dynamically make BYTE(8)
] none
; CHAR ** for UuidToString
strguid: make struct! GUIDSTR-def: compose/deep [
strval [string!] ;
] none
; declare the routines
; Bind to win SDK UuidCreate
UuidCreate: make routine! compose/deep/only [
guidout [struct! (GUID-def)]
return: [long] ; RPC_STATUS
] rpclib.dll "UuidCreate"
; Bind to win SDK UuidToString
; Could also easily use to-hex to build string UUID direct from the GUID
; struct
UuidToString: make routine! compose/deep/only [
guidin [struct! (GUID-def)]
guidstring [struct! (GUIDSTR-def)]
return: [long] ; RPC_STATUS
] rpclib.dll "UuidToStringA"
; generate UUID
UuidCreate GUID
; convert to string
UuidToString GUID strguid
; release lib resource
free rpclib.dll
; let's see it
print uppercase strguid/strval |