Функция CreateObject (Visual Basic)

Обновлен: Ноябрь 2007

Создает и возвращает ссылку на COM-объект. Функция CreateObject не может использоваться для создания экземпляров классов в Visual Basic, если только эти классы не предоставляются явным образом как COM-компоненты.

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

Параметры

  • ProgId
    Обязательный параметр. String. Программный идентификатор создаваемого объекта.

  • 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 и основную сборку взаимодействия.

Взаимодействие с неуправляемым кодом

Дополнительная проблема состоит в том, что COM-объекты используют неуправляемый код — код, не использующий преимущества среды CLR. Смешение управляемого кода Visual Basic и неуправляемого кода COM-объектов вносит дополнительную сложность. При добавлении ссылки на COM-объект Visual Basic производит поиск основной сборки взаимодействия (PIA) для этой библиотеки; если поиск оказывается успешным, то эта сборка используется в дальнейшей работе. Если основную сборку взаимодействия найти не удается, то Visual Basic создает сборку взаимодействия, которая содержит локальные классы взаимодействия для каждого класса в библиотеке COM. Дополнительные сведения см. в разделе COM-совместимость в приложениях .NET Framework.

По возможности следует использовать сильно связанные объекты и основные сборки взаимодействия. В приводимых ниже примерах использование функции CreateObject для создания объектов Microsoft Office показано исключительно в демонстрационных целях. Однако эти объекты проще применять и они более надежны, если их использовать с соответствующей основной сборкой взаимодействия.

Создание объекта на удаленном компьютере

Существует возможность создания объекта на удаленном сетевом компьютере путем передачи имени компьютера в аргументе ServerName функции CreateObject. Это имя совпадает с той частью имени общего ресурса, которая относится к имени компьютера: для имени общего ресурса "\\MyServer\\Public" значением ServerName будет "MyServer".

7t9k08y5.alert_note(ru-ru,VS.90).gifПримечание.

Для получения дополнительных сведений о том, как сделать приложение доступным с удаленных сетевых компьютеров, обратитесь к документации по COM (см. Microsoft Developer Network). Возможно, для приложения потребуется добавить раздел реестра.

Следующий код реализует возврат номера версии экземпляра Excel, запущенного на удаленном компьютере с именем MyServer.

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

Если имя удаленного сервера неверно или если он недоступен, возникает ошибка во время выполнения.

7t9k08y5.alert_note(ru-ru,VS.90).gifПримечание.

Функцию CreateObject следует использовать при отсутствии текущих экземпляров объекта. Если экземпляр объекта уже существует, будет запущен новый экземпляр и создан объект соответствующего типа. Для использования существующего экземпляра или запуска приложения и загрузки файла следует использовать функцию GetObject. Если объект зарегистрировался в качестве объекта с единственным экземпляром, то вне зависимости от числа запусков функции CreateObject создается только один экземпляр объекта.

Создание объектов .NET Framework

Функцию CreateObject можно использовать только для создания COM-объекта. Хотя полностью эквивалентный механизм для создания объекта .NET Framework пока отсутствует, класс Activator в пространстве имен System содержит методы для создания локальных и удаленных объектов. В частности, могут быть полезны методы CreateInstance или CreateInstanceFrom.

7t9k08y5.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Функция CreateObject требует разрешения неуправляемого кода, что может повлиять на выполнение в ситуациях частичного доверия. Дополнительные сведения см. в разделах SecurityPermission и Разрешения для доступа к коду.

Пример

В этом примере показано применение функции CreateObject для создания таблицы Microsoft Excel и записи ее в файл. Чтобы использовать этот пример, на компьютере, где выполняется эта программа, следует установить приложение Microsoft Excel. Кроме того, необходимо добавить ссылку на библиотеку типов с помощью вкладки COM диалогового окна Добавление ссылки в меню Проект. Имя библиотеки типов зависит от установленной на компьютере версии Microsoft 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

Другие ресурсы

COM-совместимость в приложениях .NET Framework

Взаимодействие с неуправляемым кодом