FEHLER: Fehlermeldung "Objektvariable oder With-Blockvariable wurde nicht festgelegt" beim Zugriff auf eine öffentliche Objektvariable

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 316478 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Sie in Microsoft Visual Basic .NET oder Microsoft Visual Basic 2005 eine öffentliche Objektvariable einer Microsoft COM-Komponente (COM = Component Object Model) festlegen, wird möglicherweise die folgende Fehlermeldung angezeigt:
Eine nicht behandelte Ausnahme des Typs 'System.Runtime.InteropServices.COMException' ist in microsoft.visualbasic.dll aufgetreten

Zusätzliche Informationen: Objektvariable oder With-Blockvariable wurde nicht festgelegt

Ursache

Dieses Verhalten kann auftreten, wenn alle der folgenden Bedingungen vorliegen:
  • Sie definieren eine öffentliche Variable in der COM-Komponente.
  • Die Variable hat den Typ Objekt.
  • Sie verweisen in Visual Basic .NET oder Visual Basic 2005 mittels später Bindung auf diese COM-Komponente.
Wenn Sie mittels später Bindung auf das öffentliche Objekt zugreifen, wird in Visual Basic .NET oder Visual Basic 2005 die BindingFlags-Enumeration nicht korrekt festgelegt.

In der BindingFlags-Enumeration werden die Flags angegeben, die die Bindung und die Methode steuern, mit der die Suche nach Elementen und Typen mittels Reflektion durchgeführt wird.

Abhilfe

Wenden Sie eine der folgenden Methoden an, um das Problem zu umgehen.

Verwenden der frühen Bindung in Visual Basic .NET oder Visual Basic 2005

Verwenden Sie in der Visual Basic .NET- oder Visual Basic 2005-Clientanwendung die frühe Bindung. Dies ist die einfachste Lösung, weil Sie die COM-Komponente nicht neu erstellen müssen. Definieren Sie zum Verwenden von früher Bindung in Visual Basic .NET oder Visual Basic 2005 die Objektvariable, indem Sie den Typnamen von der Interop-Assembly verwenden, der erzeugt wird, wenn Sie den Verweis auf die Komponente festlegen. Definieren Sie die Objektvariable nicht unter Verwendung des Typs Objekt.

Wenn Sie den im Abschnitt "Schritte zum Reproduzieren des Problems" beschriebenen Visual Basic .NET- oder Visual Basic 2005-Beispielcode verwenden, definieren Sie die Objektvariable mithilfe des folgenden Beispielcodes:
Dim obj1 As Project1.Class1
Set obj1 = New Project1.Class1
Verwenden Sie nicht den folgenden Beispielcode:
Dim obj1 As Object
Set obj1 = New Project1.Class1

Definieren einer öffentlichen Eigenschaftenprozedur in der COM-Komponente

Ändern Sie die Microsoft Visual Basic 6.0 COM-Komponente, sodass sie eine öffentliche Eigenschaftenprozedur verwendet, um das Objekt festzulegen und zurückzugeben. Führen Sie diese Aktion durch, statt eine globale Objekt-Variable zu verwenden. Diese Lösung ist schwieriger zu implementieren, weil Sie die ursprüngliche Visual Basic 6.0-Komponente ändern müssen. Wenn Sie dies tun, müssen Sie möglicherweise die Binärkompatibilität der Komponente aufheben.

Wenn Sie den im Abschnitt "Schritte zum Reproduzieren des Problems" beschriebenen Visual Basic 6.0-Beispielcode verwenden, können Sie mithilfe des folgenden Beispielcodes eine Öffentliche Eigenschaft-Prozedur in der Klasse Class1 definieren, um die Objektvariable festzulegen und abzurufen.
Option Explicit

Private obj1 As Object

Public Property Get Obj() As Object
    Set Obj = obj1
End Property

Public Property Let Obj(Object As Object)
    Set obj1 = Object
End Property

Status

Microsoft hat bestätigt, dass es sich hierbei um einen Bug bei den in diesem Artikel genannten Microsoft-Produkten handelt.

Weitere Informationen

Schritte zum Reproduzieren des Problems

Erstellen eines ActiveX-DLL-Projekts in Visual Basic 6.0

  1. Starten Sie Visual Basic 6.0.
  2. Erstellen Sie ein neues ActiveX-DLL-Projekt.

    "Class1" wird standardmäßig erstellt.
  3. Geben Sie den folgenden Code im Abschnitt "Allgemeine Deklarationen" des Moduls ein:
    Public obj As Object		
  4. Kompilieren Sie dieses Projekt, um "Project1.dll" zu erhalten.

Erstellen der Visual Basic .NET- oder Visual Basic 2005-Anwendung

  1. Starten Sie Microsoft Visual Studio .NET, Microsoft Visual Studio 2005 oder Microsoft Visual Basic 2005 Express Edition..
  2. Erstellen Sie eine neue Visual Basic .NET- oder Visual Basic 2005-Konsolenanwendung.

    Standardmäßig wird "Module1.vb" erstellt.
  3. Klicken Sie im Menü Projekt auf Verweis hinzufügen.
  4. Klicken Sie auf die Registerkarte COM.
  5. Klicken Sie in der Liste der verfügbaren COM-Verweise auf Project1, und klicken Sie auf Auswählen. Wenn Project1 nicht aufgelistet ist, klicken Sie auf Durchsuchen, und suchen Sie "Project1.dll" auf der Festplatte des Computers.

    Hinweis In Visual Studio 2005 oder Visual Basic 2005 Express Edition müssen Sie nicht auf Auswählen klicken.
  6. Klicken Sie auf OK, um das Dialogfeld Verweis hinzufügen zu schließen.
  7. Ersetzen Sie den Standardcode in "Module1.vb" durch den folgenden Beispielcode:
    Module Module1
         Sub Main()
            Dim obj1 As Object
            Console.WriteLine("Project.Class1 wird instanziiert.")
            obj1 = New Project1.Class1
            Console.WriteLine("Objekt wird instanziiert.")
            obj1.obj = Nothing   'Diese Zeile verursacht den Fehler.
            Console.WriteLine("obj-Member wird auf Nothing festgelegt.")
            Console.WriteLine("Zum Beenden EINGABETASTE drücken.")
            Console.Read()
        End Sub
    End Module
  8. Führen Sie das Projekt aus.

    Die im Abschnitt "Problembeschreibung" genannte Fehlermeldung wird angezeigt.
Hinweis Dies ist ein Artikel, der im Schnellverfahren direkt von der Microsoft-Supportorganisation erstellt wurde. Die hierin enthaltenen Informationen werden als Reaktion auf neue Probleme wie besehen bereitgestellt. Da dieser Artikel im Schnellverfahren erstellt wurde, kann er Tippfehler enthalten und zu einem späteren Zeitpunkt ohne vorherige Ankündigung überarbeitet werden. Weitere zu berücksichtigende Informationen finden Sie in den Nutzungsbedingungen.

Eigenschaften

Artikel-ID: 316478 - Geändert am: Dienstag, 4. Februar 2014 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbvs2005applies kbvs2005swept kbvs2002sp1sweep kbbug kberrmsg kbpending KB316478
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com