Window Programming/VB

CreateObject() 함수를 이용하여 동적으로 ActiveX Object를 생성

목사 2009. 3. 23. 08:43

▣ 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