Solved

Using CoCreateGuid from Visual Basic

Posted on 1998-07-08
5
958 Views
Last Modified: 2013-11-25
Hello...

I would like to create and work with GUID's from visual basic. I would like to call CoCreateGuid, and receive a pointer to a UUID, however this seems a bit tricky since the predefined UUID uses unsupported variant types (unsigned long is unsupported?)

If you could provide me with an example of creating a new GUID and converting it to a string, then i'd be happy...

(I could create a DLL in c/c++ that did the job, but if its possible from VB, then i'd prefer that).

Have a nice day, and thank you!
0
Comment
Question by:mtoft
  • 3
  • 2
5 Comments
 
LVL 2

Author Comment

by:mtoft
ID: 1465228
Adjusted points to 250
0
 
LVL 1

Accepted Solution

by:
gissing earned 250 total points
ID: 1465229
The declaration you need is:

Declare Function CoCreateGuid Lib "ole32.dll" (ByVal pguid As String) As Long

call it from code like this:

Dim hResult As Long
Dim sGuidBuf As String

    sGuidBuf = String(16, 0)
    hResult = CoCreateGuid(sGuidBuf)

If hResult = 0 then your sGuidBuf string buffer contains the 16 byte values of the GUID. The guid structure is a long, two unsigned shorts and eight chars (which gives the 16 bytes). In vb, put the numerics into longs since vb doesn't support unsigned types. Combine that with the Hex$ function, and you can translate the 16-bytes in your buffer into a more familiar looking GUID.
0
 
LVL 2

Author Comment

by:mtoft
ID: 1465230
Impressive how one can "stretch" the API...

Thank you!
0
 
LVL 2

Author Comment

by:mtoft
ID: 1465231
Impressive how one can "stretch" the API...

Thank you!
0
 
LVL 1

Expert Comment

by:gissing
ID: 1465232
You're welcome.

Having giving it further thought, you don't have to put the byte values into longs before calling Hex$.

For example, try this:

Dim sMyGuid As String

    sMyGud = ""
    sMyGud = sMyGuid & Hex$(Asc(Mid$(sGuidBuf,4,1)))) & Hex$(Asc(Mid$(sGuidBuf,3,1))))& Hex$(Asc(Mid$(sGuidBuf,2,1))))& Hex$(Asc(Mid$(sGuidBuf,1,1))))

which will start you off with the first long in the guid structure as Hex. (remember the bytes come at you in the buffer with the least significant byte first)

Glad to have been of some help...
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Enums (shorthand for ‘enumerations’) are not often used by programmers but they can be quite valuable when they are.  What are they? An Enum is just a type of variable like a string or an Integer, but in this case one that you create that contains…
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question