Здравствуйте, MishaVBA, Вы писали:
MVB>Помогите запустить функцию ProgIDFromCLSID в VBA
Option Explicit
Private Type TGUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Declare Function CLSIDFromString Lib "ole32.dll" ( _
ByVal lpsz As Long, rguid As TGUID) As Long
Private Declare Function ProgIDFromCLSID Lib "ole32.dll" ( _
clsid As TGUID, lplpszProgID As Long) As Long
Private Const NOERROR As Long = 0
Private Declare Function lstrlenW Lib "kernel32" ( _
ByVal lpString As Any) As Long
Private Declare Function lstrcpynW Lib "kernel32" ( _
ByVal lpString1 As Any, ByVal lpString2 As Any, _
ByVal iMaxLength As Long) As Long
Private Function LPWSTR2String(ByVal lpWStr As Long) As String
Dim nStrLen As Long
Dim sTmp As String
nStrLen = lstrlenW(lpWStr)
sTmp = String$(nStrLen, vbNullChar)
lstrcpynW ByVal StrPtr(sTmp), lpWStr, nStrLen + 1
LPWSTR2String = sTmp
End Function
Private Sub Command1_Click()
Dim Result As Long
Dim clsid As TGUID
Dim lpszProgID As Long
Result = CLSIDFromString(StrPtr("{D3E34B21-9D75-101A-8C3D-00AA001A1652}"), _
clsid)
If Result = NOERROR Then
Result = ProgIDFromCLSID(clsid, lpszProgID)
If Result = NOERROR Then
Debug.Print LPWSTR2String(lpszProgID)
End If
End If
End Sub