CreateObject 함수(Visual Basic)

업데이트: 2007년 11월

COM 개체에 대한 참조를 만들어 반환합니다. 클래스가 명시적으로 COM 구성 요소로 노출되지 않는 경우 Visual Basic에서 CreateObject 함수를 사용하여 해당 클래스의 인스턴스를 만들 수 없습니다.

Public Shared Function CreateObject( _
   ByVal ProgId As String, _
   Optional ByVal ServerName As String = "" _
) As Object

매개 변수

  • ProgId
    필수적 요소. String. 만들 개체의 프로그램 ID입니다.

  • ServerName
    선택적 요소. String. 개체가 만들어질 네트워크 서버의 이름입니다. ServerName이 빈 문자열("")이면 로컬 컴퓨터가 사용됩니다.

예외

예외 형식

오류 번호

조건

Exception

429

ProgId를 찾을 수 없거나 지정하지 않았습니다.

-또는-

ServerName으로 인해 DnsValidateName 함수에 오류가 발생했습니다. 63자보다 길거나 잘못된 문자가 포함되어 있을 가능성이 많습니다.

Exception

462

서버를 사용할 수 없습니다.

FileNotFoundException

53

지정된 형식의 개체가 없습니다.

비구조적 오류 처리를 사용하는 Visual Basic 6.0 응용 프로그램을 업그레이드하는 경우에는 "오류 번호" 열을 참조하십시오. 오류 번호를 Number 속성(Err 개체)과 비교할 수 있습니다. 그러나 가능하면 이러한 오류 제어 방법을 Visual Basic의 구조적 예외 처리 개요에 설명된 방식으로 바꾸는 것이 좋습니다.

설명

COM 구성 요소 인스턴스를 만들려면 CreateObject에 의해 반환되는 개체를 개체 변수에 할당합니다.

Sub CreateADODB()
   Dim adoApp As Object
   adoApp = CreateObject("ADODB.Connection")
End Sub

반환된 개체를 저장하는 데 사용하는 개체 변수의 형식은 응용 프로그램 성능에 영향을 줄 수 있습니다. As Object 절을 사용하여 개체 변수를 선언하면 모든 형식의 개체에 대한 참조를 포함할 수 있는 변수가 만들어집니다. 그러나 이러한 변수를 통한 개체 액세스는 런타임에 바인딩됩니다. 즉, 프로그램이 실행될 때 바인딩이 발생합니다. 런타임에 바인딩은 응용 프로그램 성능 저하 등의 문제를 일으킬 수 있으므로 사용하지 않는 것이 좋습니다.

초기 바인딩, 즉 프로그램이 컴파일될 때 바인딩이 이루어지는 개체 변수를 만들 수 있습니다. 이 작업을 수행하려면 프로젝트 메뉴에 있는 참조 추가 대화 상자의 COM 탭에서 해당 개체에 대한 형식 라이브러리에 참조를 추가합니다. 그런 다음 해당 개체에 대한 특정 형식의 개체 변수를 선언합니다. 대부분의 경우 개체를 만들 때는 CreateObject 함수를 사용하는 것보다 Dim 문과 주 interop 어셈블리를 사용하는 것이 더 효율적입니다.

비관리 코드를 인터페이스로 사용

비관리 코드, 즉 공용 언어 런타임의 이점이 없는 코드를 COM 개체가 사용하는 것도 문제가 될 수 있습니다. Visual Basic의 관리 코드와 COM의 비관리 코드를 혼합하는 것은 매우 복잡한 작업이기 때문입니다. COM 개체에 대한 참조를 추가하면 Visual Basic에서는 해당 라이브러리에 대한 PIA(주 Interop 어셈블리)를 검색합니다. PIA가 발견되면 그 PIA를 사용합니다. PIA를 찾지 못하면 COM 라이브러리의 각 클래스에 대한 로컬 상호 운용성 클래스가 포함된 상호 운용성 어셈블리를 만듭니다. 자세한 내용은 .NET Framework 응용 프로그램의 COM 상호 운용성을 참조하십시오.

일반적으로는 가능하다면 강력하게 바인딩된 개체와 주 interop 어셈블리를 사용해야 합니다. 아래 예제에서는 CreateObject 함수를 사용하여 데모 전용 Microsoft Office 개체를 만듭니다. 그러나 이러한 개체는 적절한 주 interop 어셈블리와 함께 사용하는 것이 보다 사용하기 쉽고 안정적입니다.

원격 컴퓨터에서 개체 만들기

CreateObject 함수의 ServerName 인수에 컴퓨터 이름을 전달하면 네트워크에 연결되어 있는 원격 컴퓨터에서 개체를 만들 수 있습니다. 이 이름은 공유 이름의 컴퓨터 이름 부분과 같습니다. 예를 들어, "\\MyServer\Public"이라는 공유의 ServerName은 "MyServer"입니다.

참고:

원격 네트워크 컴퓨터에서 응용 프로그램에 액세스할 수 있게 만드는 방법에 대한 자세한 내용은 COM 설명서(Microsoft Developer Network 참조)를 참조하십시오. 응용 프로그램에 대한 레지스트리 키를 추가해야 하는 경우도 있습니다.

다음 코드에서는 MyServer라는 원격 컴퓨터에서 실행되고 있는 Excel 인스턴스의 버전 번호를 반환합니다.

Sub CreateRemoteExcelObj()
    Dim xlApp As Object
    ' Replace string "\\MyServer" with name of the remote computer.
    xlApp = CreateObject("Excel.Application", "\\MyServer")
    MsgBox(xlApp.Version)
End Sub

원격 서버 이름이 틀리거나 사용할 수 없는 경우 런타임 오류가 발생합니다.

참고:

개체의 현재 인스턴스가 없는 경우 CreateObject를 사용하십시오. 개체의 인스턴스가 이미 실행되고 있는 경우 새로운 인스턴스가 시작되고 지정된 형식의 개체가 만들어집니다. 현재 인스턴스를 사용하거나, 응용 프로그램을 시작하여 해당 응용 프로그램이 파일을 로드하게 하려면 GetObject 함수를 사용하십시오. 개체가 단일 인스턴스 개체로 등록되어 있는 경우에는 CreateObject 실행 횟수에 관계없이 개체 인스턴스가 하나만 만들어집니다.

Framework 개체 만들기

CreateObject 함수는 COM 개체를 만드는 데만 사용할 수 있습니다. .NET Framework 개체를 만들 수 있는 정확한 해당 메커니즘은 없지만 System 네임스페이스의 Activator에는 로컬 또는 원격 개체를 만들 수 있는 메서드가 있습니다. 특히 CreateInstance 메서드나 CreateInstanceFrom 메서드가 유용할 수 있습니다.

보안 정보:

CreateObject 함수를 사용하려면 비관리 코드 권한이 있어야 합니다. 이 권한은 부분 신뢰 상태에서 해당 함수의 실행을 제한할 수 있습니다. 자세한 내용은 SecurityPermission코드 액세스 권한을 참조하십시오.

예제

다음 예제에서는 CreateObject 함수를 사용하여 Microsoft Excel 워크시트를 만들고 워크시트를 파일에 저장합니다. 이 예제를 사용하려면 이 프로그램이 실행되는 컴퓨터에 Excel이 설치되어 있어야 합니다. 또한 프로젝트 메뉴를 사용하여 참조 추가 대화 상자의 COM 탭에서 형식 라이브러리에 대한 참조를 추가해야 합니다. 형식 라이브러리의 이름은 컴퓨터에 설치된 Excel 버전에 따라 달라집니다. 예를 들어, Microsoft Excel 2002의 형식 라이브러리 이름은 Microsoft Excel 10.0 Object Library입니다.

Sub TestExcel()
    Dim xlApp As Microsoft.Office.Interop.Excel.Application
    Dim xlBook As Microsoft.Office.Interop.Excel.Workbook
    Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet

    xlApp = CType(CreateObject("Excel.Application"), _
                Microsoft.Office.Interop.Excel.Application)
    xlBook = CType(xlApp.Workbooks.Add, _
                Microsoft.Office.Interop.Excel.Workbook)
    xlSheet = CType(xlBook.Worksheets(1), _
                Microsoft.Office.Interop.Excel.Worksheet)

    ' The following statement puts text in the second row of the sheet.
    xlSheet.Cells(2, 2) = "This is column B row 2"
    ' The following statement shows the sheet.
    xlSheet.Application.Visible = True
    ' The following statement saves the sheet to the C:\Test.xls directory.
    xlSheet.SaveAs("C:\Test.xls")
    ' Optionally, you can call xlApp.Quit to close the workbook.
End Sub

스마트 장치 개발자 참고 사항

이 함수는 지원되지 않습니다.

요구 사항

네임스페이스: Microsoft.VisualBasic

모듈: Interaction

**어셈블리:**Visual Basic 런타임 라이브러리(Microsoft.VisualBasic.dll)

참고 항목

참조

GetObject 함수(Visual Basic)

Dim 문(Visual Basic)

Declare 문

Exception

FileNotFoundException

Activator

CreateInstance

CreateInstanceFrom

기타 리소스

.NET Framework 응용 프로그램의 COM 상호 운용성

비관리 코드와의 상호 운용