CreateObject, fonction (Visual Basic)

Mise à jour : novembre 2007

Crée et retourne une référence à l'objet COM. CreateObject ne peut être utilisé pour créer des instances de classes dans Visual Basic à moins que ces classes soient exposées explicitement en tant que composants COM.

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

Paramètres

  • ProgId
    Requis. String. L'ID de programme de l'objet à créer.

  • ServerName
    Facultatif. String. Nom du serveur réseau au niveau duquel l'objet sera créé. Si ServerName est une chaîne vide (""), l'ordinateur local est utilisé.

Exceptions

Type d'exception

Numéro de l'erreur

Condition

Exception

429

ProgId est introuvable ou non fourni

- ou -

ServerName fait échouer la fonction DnsValidateName, très probablement parce qu'elle comprend plus de 63 caractères ou contient un caractère non valide.

Exception

462

Le serveur est indisponible.

FileNotFoundException

53

Aucun objet du type spécifié n'existe

Consultez la colonne « Numéro d'erreur » si vous mettez à niveau des applications Visual Basic 6.0 qui utilisent la gestion des erreurs non structurée. (Vous pouvez comparer le numéro d'erreur par rapport à Number, propriété (objet Err).) Toutefois, lorsque cela est possible, vous devez envisager de remplacer un tel contrôle d'erreur par Vue d'ensemble de la gestion structurée des exceptions pour Visual Basic.

Notes

Pour créer une instance d'un composant COM, assignez l'objet retourné par la fonction CreateObject à une variable objet :

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

Le type de la variable objet que vous utilisez pour stocker l'objet retourné peut affecter les performances de vos applications. La déclaration d'une variable objet avec la clause As Object crée une variable pouvant contenir une référence à n'importe quel type d'objet. Cependant, l'accès à l'objet par l'intermédiaire de cette variable est à liaison tardive, c'est-à-dire que la liaison est créée lors de l'exécution de votre programme. Vous devez éviter la liaison tardive pour plusieurs raisons, parmi lesquelles le ralentissement de l'exécution de l'application.

Vous pouvez créer une variable objet qui produit une liaison anticipée, c'est-à-dire que la liaison est créée lors de la compilation du programme. Pour cela, ajoutez une référence à la bibliothèque de types pour votre objet à partir de l'onglet COM de la boîte de dialogue Ajouter une référence dans le menu Projet. Puis déclarez la variable objet du type spécifique de votre objet. Dans la plupart des cas, il est plus efficace d'utiliser l'instruction Dimet un assembly PIA (Primary Interop Assembly) pour créer des objets plutôt qu'utiliser la fonction CreateObject.

Interaction avec le code non managé

Un autre problème est que les objets COM utilisent un code non managé, un code sans l'avantage du Common Language Runtime. Le mélange de code managé Visual Basic et de code non managé COM implique un certain degré de complexité. Quand vous ajoutez une référence à un objet COM, Visual Basic cherche un assembly PIA (Primary Interop Assembly) prédéfini pour cette bibliothèque ; si un assembly est trouvé, il est alors utilisé. Si aucun assembly n'est trouvé, Visual Basic crée un assembly d'interopérabilité qui contient les classes d'interopérabilité locales pour chaque classe de la bibliothèque COM. Pour plus d'informations, consultez Interopérabilité COM dans les applications .NET Framework.

En général, il est préférable d'utiliser des objets fortement liés et des assemblys PIA (Primary Interop Assembly) dès que cela est possible. Les exemples ci-dessous utilisent la fonction CreateObject avec des objets Microsoft Office uniquement dans un but démonstratif. Cependant, ces objets sont plus faciles à utiliser et plus fiables lorsqu'ils sont utilisés avec l'assembly PIA (Primary Interop Assembly) approprié.

Création d'un objet sur un ordinateur distant

Vous pouvez créer un objet sur un ordinateur réseau distant en passant le nom de l'ordinateur à l'argument ServerName de la fonction CreateObject. Ce nom est identique à une partie du nom de l'ordinateur partagé : pour un partage nommé "\\MyServer\Public", ServerName, le nom est "MyServer."

Remarque :

Consultez la documentation COM (voir Microsoft Developer Network) pour plus d'informations sur la manière de rendre accessible une application à partir d'un ordinateur réseau distant. Il vous faudra peut-être ajouter une clé de Registre pour votre application.

Le code suivant retourne le numéro de version d'une instance d'Excel en cours d'exécution sur un ordinateur distant appelé 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

Si le nom du serveur distant est incorrect, ou si le serveur n'est pas disponible, une erreur se produit au moment de l'exécution.

Remarque :

Utilisez CreateObject lorsqu'il n'existe aucune instance actuelle de l'objet. S'il en existe une, une nouvelle instance est lancée et un objet du type spécifié est créé. Pour utiliser l'instance actuelle ou pour lancer l'application en chargeant un fichier, utilisez la fonction GetObject. Si un objet s'est inscrit comme un objet à instance unique, une seule instance de l'objet est créée, quel que soit le nombre d'exécutions de l'objet CreateObject.

Création d'objets Framework

Vous pouvez utiliser la fonction CreateObject uniquement pour créer un objet COM. Bien qu'il n'y ait aucun mécanisme équivalent exact pour créer un objet .NET Framework, le Activator dans l'espace de noms System contient des méthodes pour créer des objets locaux ou distants. En particulier, la méthode CreateInstance ou la méthode CreateInstanceFrom peuvent être utiles.

Note de sécurité :

La fonction CreateObject nécessite une permission de code non managée, qui peut affecter son exécution dans les situations d'un niveau de confiance partiel. Pour plus d'informations, consultez SecurityPermission et Autorisations d'accès du code.

Exemple

L'exemple suivant utilise la fonction CreateObject pour créer une feuille de calcul Microsoft Excel et enregistre la feuille de calcul dans un fichier. Pour utiliser cet exemple, Excel doit être installé sur l'ordinateur où ce programme s'exécute. Vous devez également ajouter une référence à la bibliothèque de types à partir de l'onglet COM de la boîte de dialogue Ajouter une référence dans le menu Projet. Le nom de la bibliothèque de types varie en fonction de la version d'Excel installée sur votre ordinateur. Par exemple, la bibliothèque de types pour Microsoft Excel 2002 se nomme 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

Notes du développeur sur Smart Device

Cette fonction n'est pas prise en charge.

Configuration requise

Espace de noms :Microsoft.VisualBasic

Module :Interaction

**Assembly :**bibliothèque Visual Basic Runtime (dans Microsoft.VisualBasic.dll)

Voir aussi

Référence

GetObject, fonction (Visual Basic)

Dim, instruction (Visual Basic)

Declare, instruction

Exception

FileNotFoundException

Activator

CreateInstance

CreateInstanceFrom

Autres ressources

Interopérabilité COM dans les applications .NET Framework

Interopération avec du code non managé