Join The Works program to have access to the most current content, and to be able to ask questions and get answers from Revelation staff and the Revelation community

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 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


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

View this thread on the Works forum...

  • third_party_content/community/commentary/forums_works/c638391d89ab8ac68525770d006e0de6.txt
  • Last modified: 2023/12/30 11:57
  • by 127.0.0.1