Interaction.GetObject(String, String) Metod

Definition

Returnerar en referens till ett objekt som tillhandahålls av en COM-komponent.

[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The COM component to be returned cannot be statically analyzed and may be trimmed")]
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static object? GetObject(string? PathName = default, string? Class = default);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static object? GetObject(string? PathName = default, string? Class = default);
public static object GetObject(string PathName = default, string Class = default);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The COM component to be returned cannot be statically analyzed and may be trimmed")>]
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetObject : string * string -> obj
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member GetObject : string * string -> obj
static member GetObject : string * string -> obj
Public Function GetObject (Optional PathName As String = Nothing, Optional Class As String = Nothing) As Object

Parametrar

PathName
String

Optional. String. Den fullständiga sökvägen till och namnet på den fil som innehåller det objekt som ska hämtas. Om PathName utelämnas Class krävs.

Class
String

Krävs om PathName den inte har angetts. String. En sträng som representerar objektets klass. Argumentet Class har följande syntax och delar:

appname.objecttype

[1|1] Parametern

[1|2] Beskrivning

[2|1] appname

[2|2] Krävs. String. Namnet på programmet som tillhandahåller objektet.

[3|1] objecttype

[3|2] Krävs. String. Den typ eller klass av objekt du vill skapa.

Returer

En referens till ett objekt som tillhandahålls av en COM-komponent.

Attribut

Undantag

Det finns inget objekt av den angivna klasstypen.

Det finns inget objekt med den angivna sökvägen och filnamnet.

Exempel

I följande exempel används funktionen GetObject för att hämta en referens till ett specifikt Microsoft Excel kalkylblad (excelObj). Den använder kalkylbladets egenskap Application för att göra Excel synlig, stänga den och utföra andra åtgärder. Med hjälp av två API-anrop letar detectExcel-proceduren efter Excel och anger den i tabellen Kör objekt om den körs. Det första anropet till GetObject orsakar ett fel om Excel inte redan körs, vilket i det här exemplet gör att flaggan excelWasNotRunning anges till True. Det andra anropet till GetObject anger en fil som ska öppnas. Om Excel inte redan körs startar det andra anropet det och returnerar en referens till kalkylbladet som representeras av den angivna filen, test.xls. Filen måste finnas på den angivna platsen. annars genererar Visual Basic en FileNotFoundException. Därefter gör exempelkoden både Excel och fönstret som innehåller det angivna kalkylbladet synliga.

Det här exemplet kräver Option Strict Off eftersom det använder sen bindning, där objekt tilldelas till variabler av typen Object. Du kan ange Option Strict On och deklarera objekt av specifika objekttyper om du lägger till en referens till Excel typbiblioteket från fliken COM på fliken Lägg till referens i dialogrutan Project i Visual Studio.

' Add Option Strict Off to the top of your program.
Option Strict Off
' Test to see if a copy of Excel is already running.
Private Sub testExcelRunning()
    On Error Resume Next
    ' GetObject called without the first argument returns a
    ' reference to an instance of the application. If the
    ' application is not already running, an error occurs.
    Dim excelObj As Object = GetObject(, "Excel.Application")
    If Err.Number = 0 Then
        MsgBox("Excel is running")
    Else
        MsgBox("Excel is not running")
    End If
    Err.Clear()
    excelObj = Nothing
End Sub
Private Sub getExcel()
    Dim fileName As String = "c:\vb\test.xls"

    If Not My.Computer.FileSystem.FileExists(fileName) Then
        MsgBox(fileName & " does not exist")
        Exit Sub
    End If

    ' Set the object variable to refer to the file you want to use.
    Dim excelObj As Object = GetObject(fileName)
    ' Show Excel through its Application property. 
    excelObj.Application.Visible = True
    ' Show the window containing the file.
    Dim winCount As Integer = excelObj.Parent.Windows.Count()
    excelObj.Parent.Windows(winCount).Visible = True

    ' Insert additional code to manipulate the test.xls file here.
    ' ...

    excelObj = Nothing
End Sub

När du anropar funktionen getExcel görs en kontroll för att se om Excel redan körs. Om det inte är det skapas en instans.

Important

För enkelhetens skull förutsätter föregående exempel att alla fönster som kallas XLMAIN tillhör en instans av Microsoft Excel. Om ett annat objekt, som möjligen startades genom olaglig manipulering, skapade ett fönster med det namnet, skulle det ta emot alla meddelanden som du avsåg för Excel. I ett program som ska användas för produktion bör du inkludera några mer rigorösa tester för att kontrollera att XLMAIN verkligen tillhör Excel.

Kommentarer

GetObject Använd funktionen för att läsa in en instans av en COM-komponent från en fil. I följande exempel visas detta.

Dim CADObject As Object
CADObject = GetObject("C:\CAD\schema.cad")

När den här koden körs startas programmet som är associerat med det angivna PathName och objektet i den angivna filen aktiveras.

Standardfall

Om PathName är en sträng med noll längd ("") GetObject returnerar en ny objektinstans av den angivna klasstypen. PathName Om argumentet utelämnas GetObject returnerar ett för närvarande aktivt objekt av klasstypen som anges i Class. Om det inte finns något objekt med den angivna typen, uppstår ett fel.

Åtkomst till en underobjekt

I vissa program kan du aktivera en underobjekt som är associerad med en fil. Det gör du genom att lägga till ett utropstecken (!) i slutet av filnamnet och följa det med en sträng som identifierar den del av filen som du vill aktivera. Information om hur du skapar den här strängen finns i dokumentationen för det program som skapade objektet.

I ett ritprogram kan du till exempel ha flera lager i en teckning som lagras i en fil. Du kan använda följande kod för att aktivera ett lager i en ritning med namnet schema.cad.

layerObject = GetObject("C:\CAD\schema.cad!Layer3")

Ange en klass

Om du inte anger objektets avgör Automation vilket program som ska startas och vilket objekt som ska aktiveras Classbaserat på det filnamn du anger. Vissa filer kan dock ha stöd för mer än en objektklass. En ritning kan till exempel ha stöd för tre olika typer av objekt: ett Application objekt, ett Drawing objekt och ett Toolbar objekt, som alla ingår i samma fil. Om du vill ange vilket objekt i en fil som du vill aktivera använder du det valfria Class argumentet. I följande exempel visas detta.

Dim drawObj As Object
drawObj = GetObject("C:\Drawings\sample.drw", "Figment.Drawing")

I föregående exempel Figment är namnet på ett ritningsprogram och Drawing är en av de objekttyper som det stöder.

Använda objektet

När ett objekt har aktiverats refererar du till det i kod med hjälp av objektvariabeln som du deklarerade. I föregående exempel får du åtkomst till egenskaper och metoder för det nya objektet med hjälp av objektvariabeln drawObj. I följande exempel visas detta.

drawObj.Line(9, 90)
drawObj.InsertText(9, 100, "Hello, world.")
drawObj.SaveAs("C:\Drawings\sample.drw")

Note

GetObject Använd funktionen när det finns en aktuell instans av objektet eller om du vill skapa objektet med en inläst fil. Om det inte finns någon aktuell instans och du inte vill att objektet ska startas med en fil inläst använder du CreateObject funktionen.

Om ett objekt har registrerat sig som ett ActiveX-objekt med en enskild instans skapas bara en instans av objektet, oavsett hur många gånger CreateObject som anropas. Med ett objekt GetObject med en instans returnerar alltid samma instans när den anropas med syntaxen för strängen ("") med noll längd och det orsakar ett fel om PathName argumentet utelämnas. Du kan inte använda GetObject för att hämta en referens till en klass som skapats med Visual Basic.

Important

Funktionen GetObject kräver ohanterad kodbehörighet, vilket kan påverka dess körning i situationer med partiellt förtroende. Mer information finns i SecurityPermission och Kodåtkomstbehörigheter.

Gäller för

Se även