Gründe für Laufzeitfehler 7

Veröffentlicht: 19. Okt 2002 | Aktualisiert: 21. Jun 2004

Von Mathias Schiffer

Fast scheint das Werk vollbracht - da meldet Ihre Anwendung bei der Ausführung selbst auf mit reichlich Speicher gesegnetem Rechner "Laufzeitfehler ´7´ - zu wenig Speicher". Dieser MSDN Quickie zeigt übliche Fehlergründe auf.

Ein wenig mulmig mag einem schon werden, wenn der Fehler "Laufzeitfehler ´7´ - zu wenig Speicher" erscheint, obgleich der Task-Manager anzeigt, dass noch massenhaft Speicher zu vergeben wäre. Was auß;er tatsächlicher Speicherknappheit noch zu dieser Fehlermeldung führen kann, lesen Sie in diesem Artikel.

Auf dieser Seite

 1. Microsoft Forms 2.0
 2. Verwendung der BoundText-Eigenschaft eines DataCombo-Steuerelements
 3. UserControls, die Control-Arrays enthalten
 Einfügen von GIF-Grafiken in eine RichTextBox

1. Microsoft Forms 2.0

Die häufigste Fehlerursache für das unerwartete Auftreten des Fehlers Nr. 7 ist die Verwendung der Bibliothek "Microsoft Forms 2.0 Object Library" unter Visual Basic. Diese Bibliothek stellt Steuerelemente für VBA-Anwendungen (etwa unter Microsoft Office) zur Verfügung.

Obgleich der Einsatz dieser Steuerelemente auch unter Visual Basic auf den ersten Blick problemlos erscheinen mag, wurde die Bibliothek nicht für die Verwendung unter Visual Basic entwickelt und auch nicht für diesen Einsatz getestet. Die Bibliothek "Microsoft Forms 2.0 Object Library" sollte deshalb unter Visual Basic nicht verwendet werden, denn sie gilt als besonds fehlerträchtig bezüglich des Fehlers Nr. 7. Darüber hinaus ist auch die Verbreitung (Redistribution) der Datei FM20.DLL, die die Steuerelemente der "Forms 2.0" enthält, nicht erlaubt.

Nähere Hinweise zur Problematik der "Forms 2.0" finden Sie in der Microsoft Knowledge BaseHier verlassen Sie die Website von Microsoft Deutschland in den beiden folgenden Artikeln:

 

2. Verwendung der BoundText-Eigenschaft eines DataCombo-Steuerelements

Der Fehler 7 tritt auch auf, wenn Sie in VB-Code auf die BoundText-Eigenschaft des Steuerelements DataCombo zugreifen, nachdem Sie das markierte Element aus dem Sichtbereich gescrollt haben.

Um dies zu verhindern, sollten Sie im Click-Ereignis des Steuerelements dessen BoundText-Eigenschaft abfragen und das Ergebnis in einer modulweit gültigen Variablen ablegen. Greifen Sie in Ihrem Sourcecode auf die BoundText-Eigenschaft nur über diese modulweit gültige Variable zu.

Zusätzliche Informationen zu diesem Problem finden Sie in der Microsoft Knowledge BaseHier verlassen Sie die Website von Microsoft Deutschland:

 

3. UserControls, die Control-Arrays enthalten

Ein UserControl enthält ein Control-Array. Ein Control aus diesem Array wird einem im UserControl-Modul modulweit gültigen Objekt zugewiesen. Nach mehrmaligem Laden und Entladen der Form, die das UserControl enthält, kann der Fehler auftreten.

Um dieses Problem zu umgehen, verzichten Sie entweder auf ein Control-Array in Ihrem UserControl, oder fügen Sie dem UserControl eine öffentliche Methode hinzu, die Sie im Unload-Ereignis der beherbergenden Form aufrufen. In dieser öffentlichen Methode geben Sie alle modulweiten Objektreferenzen des UserControl-Moduls auf Objekte des Control-Arrays explizit frei, indem Sie diese zu Nothing setzen.

Zusätzliche Informationen zu diesem Problem finden Sie in der Microsoft Knowledge BaseHier verlassen Sie die Website von Microsoft Deutschland:

 

Einfügen von GIF-Grafiken in eine RichTextBox

Fügen Sie in einer RichTextBox eine GIF-Datei über die Methode OLEObjects.Add ein, erhalten Sie möglicherweise nach der ersten oder zweiten Aktion dieser Art den Fehler Nr. 7.

Die Fehlerursache liegt in diesem Fall beim Microsoft Photo Editor, der für GIF-Grafiken zuständig ist. Er soll im Hintergrund gestartet werden, doch unterstützt er die notwendige "In-Place-Aktivierung" für die Verwendung als OLE-Server nicht.

Um dieses Problem zu umgehen, haben Sie zwei Möglichkeiten: Sie können die GIF-Bilder in Bitmap-Grafiken (*.BMP) umwandeln, so dass im Hintergrund statt des Photo Editors die Bildbearbeitungssoftware Microsoft Paint gestartet wird.

Die zweite Möglichkeit ist, die GIF-Grafik nicht als OLE-Objekt über OLEObjects.Add, sondern als Grafik über die Zwischenablage in die RichTextBox einzufügen: Hierfür laden Sie die Grafik mittels LoadPicture, kopieren sie über ClipBoard.SetData in die Zwischenablage und fügen sie mithilfe von SendMessage und WM_PASTE in die RichTextBox ein:

' --- Notwendige API-Deklarationen:
Private Const WM_PASTE As Long = &H302&
Private Declare Function SendMessage _
  Lib "user32" Alias "SendMessageA" ( _
  ByVal hwnd As Long, _
  ByVal Message As Long, _
  ByVal wParam As Long, _
  ByRef lParam As Any _
  ) As Long
' --- Code
  Clipboard.SetData LoadPicture("C:\GRAFIK.GIF")
  SendMessage RichTextBox1.hwnd, WM_PASTE, 0, ByVal 0&

Zusätzliche Informationen zu diesem Problem finden Sie in der Microsoft Knowledge BaseHier verlassen Sie die Website von Microsoft Deutschland: