CreateObject() 함수를 이용하여 동적으로 ActiveX Object를 생성
▣ CreateObject() 함수를 이용하면 쉽게 동적으로 ActiveX Object를 생성할 수 있는데, VC에서 ActiveX Object를 사용하기 위해서는 다소 복잡한 과정을 거쳐야만 한다.
아래 소스는 MS 기술자료 194873 (Visual C++ 6.0 실행 파일에서 Visual Basic ActiveX DLL에 액세스하는 방법) 내용을 기준으로 VB 문법에 맞게 수정한 내용이다.
▣ CreateObject() 함수 소스
Public Function CreateObjectAPI(ByVal Class As String) As Object
Dim clsid As String
Dim rclsid As GUID
Dim riid As GUID
Dim hr As Long
Dim pClass As Long
Dim obj As Object
Set CreateObjectAPI = Nothing
If Left(Class, 1) = "{" And Right(Class, 1) = "}" Then
' CLSID로 GUID 구함
Call CLSIDFromString(StrPtr(Class), rclsid)
Else
' ProdID로 GUID 구함
hr = CLSIDFromProgID(StrPtr(Class), rclsid)
If hr <> S_OK Then
Err.Raise hr, , FormatMessage(hr)
Exit Function
End If
End If
' IID_IDispatch에 대한 GUID 구함
Call CLSIDFromString(StrPtr(IID_IDispatch), riid)
' Object 생성
hr = CoCreateInstance(rclsid, 0&, CLSCTX_ALL, riid, pClass)
If hr <> S_OK Then
Err.Clear
Err.Raise hr, , FormatMessage(hr)
Exit Function
End If
' Object Pointer로 부터 Object 구함
Set CreateObjectAPI = ObjFromPtr(pClass)
End Function
▣ 테스트 프로그램에서 사용된 소스
Private Sub Form_Load()
Dim obj As Object
'Set obj = CreateObjectAPI("{6512DC7A-4FB0-4A99-8B1B-213E5098EDA5}")
Set obj = CreateObjectAPI("Scripting.FileSystemObject")
If Not obj Is Nothing Then
MsgBox "FSO.Drives.Count = " & CStr(obj.Drives.Count)
Set obj = Nothing
End If
End
End Sub