Теребит меня такой интересный вопрос, как создать экземпляр объекта при позднем связывании зная его CLSID. Воспользовавшись поиском нашел тему, из которой построил модуль, который не очень работать хочет:)
- Код: Выделить всё
Option Explicit
Private Type GUID
Data1 As Long
Data2 As Long
Data3 As Long
Data4 As Long
Data5(5) As Byte
End Type
Private Declare Sub CoCreateInstance Lib "ole32" (rclsid As GUID, ByVal pUnkOuter As IUnknown, ByVal dwClsContext As Long, riid As GUID, ppv As Object)
Private Function CreateObjectFromCLSID(CLSID As GUID) As IUnknown
Dim IID_Unknown As GUID
'IID_Unknown = CLSID
IID_Unknown.Data4 = CLSID.Data4
IID_Unknown.Data5(5) = CLSID.Data5(5)
CoCreateInstance CLSID, Nothing, 5, IID_Unknown, CreateObjectFromCLSID
End Function
Function CreateObjectEx(ByVal Data As String) As Object
On Error Resume Next
Dim wa As Object, WordCLSID As GUID
Dim tmp() As String
Dim I As Byte
Set CreateObjectEx = Nothing
tmp = Split(Replace$(Replace$(Data, "{", ""), "}", ""), "-")
If UBound(tmp) <> 4 Then Exit Function
WordCLSID.Data1 = CDec("&h" & tmp(0))
WordCLSID.Data2 = CDec("&h" & tmp(1))
WordCLSID.Data3 = CDec("&h" & tmp(2))
WordCLSID.Data4 = CDec("&h" & tmp(3))
If Len(tmp(4)) <> 12 Then Exit Function
For I = 0 To 5
WordCLSID.Data5(I) = CDec("&h" & Mid$(tmp(4), I * 2 + 1, 2))
Next I
Set CreateObjectEx = CreateObjectFromCLSID(WordCLSID)
End Function
тестировал на самописном ActiveX Control'е - экземпляр создается и управляется, при тестировании на Тёмычевской


синтаксис проверки такой
- Код: Выделить всё
Sub CheckThis()
On error resume next
Dim X as object
Set X = CreateObjectEx("{6ACDABF7-4CAC-46CA-82C8-2A251E677080}")
Debug.Print "по CLSID: " & IIF(X is Nothing, "не создалось:(","создалось чё-та")
Set X = Nothing
Set X = CreateObject("prjGDIplus.Global")
Debug.Print "по PROGID: " & IIF(X is Nothing, "не создалось:(","создалось чё-та")
Set X = Nothing
End Sub
Пожалуйста, подскажите как правильнее создавать объект по CLSID .. а то неуникальность PROGID мешается:)
Заранее благодарен за ответы...
С Уважением,
Сергей