Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

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

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.Class1Set obj1 = New Project1.Class1
Verwenden Sie nicht den folgenden Beispielcode:
Dim obj1 As ObjectSet 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 ExplicitPrivate obj1 As ObjectPublic Property Get Obj() As Object    Set Obj = obj1End PropertyPublic Property Let Obj(Object As Object)    Set obj1 = ObjectEnd 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 SubEnd 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

Artikelnummer: 316478 – Letzte Überarbeitung: 02/04/2014 14:16:00 – Revision: 1.0

  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • kbvs2005applies kbvs2005swept kbvs2002sp1sweep kbbug kberrmsg kbpending KB316478
Feedback