GUID Creation (OpenInsight 32-Bit)
At 22 APR 2010 04:02:05PM Karl Pozmann wrote:
Anyone have a utility to generate a GUID? I've read about the various algorithms utilizing IP addresses, etc but I thought I would start here and not reinvent the wheel.
At 22 APR 2010 05:02PM Jared Bratu wrote:
OpenInsight 9.0+ include a function RTI_CREATEGUID. It uses the windows API to return a standard GUID.
Try this code snippet:
Declare Function RTI_CreateGuid
MyGuid=RTI_CreateGuid()
At 22 APR 2010 06:57PM Barry Stevens wrote:
If you are not using 9.0+, then the following may help:
Obtained and refined from forum search - GUID
function bsbs_get_guid(void)
/INITIAL SETUP STEPS
1. Prototype Definition called DLL_OLE32:
OLE32
VOID STDCALL CoInitialize(LPCHAR)
INT STDCALL CoCreateGuid(LPCHAR)
VOID STDCALL CoUninitialize()
2. Created a structure using DEFINE_STRUCT form called "GUID":
unsigned long (4 bytes)
unsigned short (2 bytes)
unsigned short (2 bytes)
char(8) (8 bytes)
/
* Returns a unique GUID value as a string, or empty upon failure
* Ole32 dll calls
declare subroutine CoInitialize, CoUnInitialize
declare function CoCreateGuid
* system
declare subroutine parse_struct
declare function blank_struct
equ guid_ok$ to 0
retGuid='
CoInitialize(0)
stGuid=blank_struct('GUID')
retval=CoCreateGuid(stGuid)
if retval=guid_ok$ then
Parse_Struct(stGuid, 'GUID', a, b, c, d)part1=oconv(a,'MX')part2=oconv(b,'MX')part3=oconv(c,'MX')part1=Fmt(part1, "R(0)#8")part2=Fmt(part2, "R(0)#4")part3=Fmt(part3, "R(0)#4")
convert char array to hex representationshex_chars='for idx=1 to len(d) ;* should be 8
hex_chars := fill_leading(oconv(seq(didx,1),'MX'),'0',2)hex_chars := fmt(oconv(seq(didx,1),'MX'),"R(0)#2")next idxpart4=hex_chars1,4part5=hex_chars5,9
combine into GUID formatretGuid={':part1:'-':part2:'-':part3:'-':part4:'-':part5:'}'end
CoUnInitialize()
return retGuid
At 23 APR 2010 05:47AM Karl Pozmann wrote:
Very cool - I knew up front there was a lot more to this seemingly simple task. And you were correct in that this is for a OI 7.2 app. Many thanks!
At 23 APR 2010 07:39AM Karl Pozmann wrote:
Thanks again, Barry. I copied and setup everything and in the end it looks like part5 is null. I setup the struct as a POINT. Here is the test program I ran which returned "{CD774E21-6783-49F9-BB-}":
Function GUID_Test()
* Returns a unique GUID value as a string, or empty upon failure
* Ole32 dll calls
declare subroutine CoInitialize, CoUnInitialize
declare function CoCreateGuid
* system
declare subroutine parse_struct
declare function blank_struct
equ guid_ok$ to 0
retGuid='
CoInitialize(0)
stGuid=blank_struct('GUID')
retval=CoCreateGuid(stGuid)
if retval=guid_ok$ then
Parse_Struct(stGuid, 'GUID', a, b, c, d)
part1=oconv(a,'MX')
part2=oconv(b,'MX')
part3=oconv(c,'MX')
part1=Fmt(part1, "R(0)#8")
part2=Fmt(part2, "R(0)#4")
part3=Fmt(part3, "R(0)#4")
* convert char array to hex representations
hex_chars='
for idx=1 to len(d) ;* should be 8
*hex_chars := fill_leading(oconv(seq(didx,1),'MX'),'0',2)
hex_chars := fmt(oconv(seq(didx,1),'MX'),"R(0)#2")
next idx
part4=hex_chars1,4
part5=hex_chars5,9
* combine into GUID format
retGuid={':part1:'-':part2:'-':part3:'-':part4:'-':part5:'}'
end
CoUnInitialize()
return retGuid