ProgIdCLSID




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












( progidclsid.html )- by Paolo Puglisi - Modifica del 17/12/2023