Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: VB4/32,VB5,VB6
Expertise: Advanced
May 5, 1999



Building the Right Environment to Support AI, Machine Learning and Deep Learning

ProgIDToCLSID - Convert a ProgID into a CLSID

Private Declare Function CLSIDFromProgID Lib "ole32.dll" (ByVal lpszProgID As _
    Long, pCLSID As Any) As Long
Private Declare Function StringFromCLSID Lib "ole32.dll" (pCLSID As Any, _
    lpszProgID As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As _
    Any, source As Any, ByVal bytes As Long)
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)

' Convert a ProgID (such as "Word.Application") into the
' string representation of its CLSID

Function ProgIdToCLSID(ByVal ProgID As String) As String
    Dim pResult As Long, pChar As Long
    Dim char As Integer, length As Long
    ' No need to use a special UDT
    Dim guid(15) As Byte
    ' get the CLSID in binary form
    CLSIDFromProgID StrPtr(ProgID), guid(0)
    ' convert to a string, get pointer to result
    StringFromCLSID guid(0), pResult
    ' find the terminating null char
    pChar = pResult - 2
        pChar = pChar + 2
        CopyMemory char, ByVal pChar, 2
    Loop While char
    ' now get the entire string in one operation
    length = pChar - pResult
    ' no need for a temporary string
    ProgIdToCLSID = Space$(length \ 2)
    CopyMemory ByVal StrPtr(ProgIdToCLSID), ByVal pResult, length
    ' release the memory allocated to the string
    CoTaskMemFree pResult
End Function
Francesco Balena
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date