Im Softwareentwicklungsprozess gibt es einige scheinbar einfache Probleme, die jedoch von normalen Entwicklern leicht ignoriert werden. Das Vorhandensein dieser „Bugs“ beeinträchtigt die Kommerzialisierung unserer Software. Nachfolgend sind mehrere solcher Probleme aufgeführt, auf die der Autor bei der Verwendung von Visual Basic zum Entwickeln von Software gestoßen ist. Die Lösungen werden hier für alle zur Diskussion und zum Austausch bereitgestellt.
1. Verhindern Sie, dass die Anwendung zweimal geladen wird
Wenn unsere Anwendung unter Windows ausgeführt wird, minimieren und verbergen wir sie manchmal oder wechseln für andere Vorgänge zum Programmmanager und möchten dann die ursprüngliche Anwendung aufrufen. Wenn wir die gerade gestartete Anwendung neu starten, Es werden zwei Kopien derselben Anwendung gleichzeitig in den Speicher geladen. Dies nimmt nicht nur Speicherplatz in Anspruch, sondern führt auch leicht zu Fehlfunktionen und Datenverlust. Um dies zu verhindern, muss das Programm die Meldung „bereits geladen“ ausgeben oder die Anwendung, die zum ersten Mal geladen wird, direkt aufrufen können. Dieses Problem scheint schwer zu lösen. Solange wir den Mechanismus von Windows-Verwaltungsanwendungen verstehen, kann es leicht gelöst werden.
Wir wissen, dass Windows jeder laufenden Anwendung ein eindeutiges „Handle“ und einen Modulcode (Module) zuweist. Wenn zwei Kopien desselben Programms gleichzeitig ausgeführt werden, sind die Modulcodes der beiden Programme gleich. Solange wir also zwei identische Modulcodes im Speicher finden, wissen wir, dass zwei Kopien des Programms ausgeführt werden und kann es kontrollieren. Die beiden von Windows bereitgestellten Schnittstellenfunktionen GetModuleHandle und GetModuleUsage können diese Aufgabe erledigen. Die spezifische Methode lautet wie folgt: Deklarieren Sie zunächst die API-Funktion in einer neuen Moduldatei (*.Bas).
DeclareFunctionGetModuleHandleLibKernel(ByVallpPRogName$)
DeclareFunctionGetModuleUsageLibKernel(ByValhModule)
Erstellen Sie gleichzeitig einen Unterprozess mit dem Namen main. Der Code im Unterprozess lautet wie folgt:
SubMain()
OnErrorGoToerrMain‘ Fehlerbehandlung
DimhModule'-Modulhandle
DimAppCount'Die Anzahl der Anwendungen
appPath$=app.Path /'Startpfad der Anwendung
hModule=GetModuleHandle(appPath$ app.EXEName .exe)'Holen Sie sich das Handle des Programms.
AppCount=GetModuleUsage(hModule)'Ruft den Modulcode ab, also die Anzahl der laufenden Anwendungen.
lfAppCount>1Then'Die Nummer derselben Anwendung ist größer als 1
MsgBox-Programm wurde geladen, 64
„End“ beendet die aktuell gestartete Anwendung
Elsc
mainForm.Show'mainForm ist die Hauptform des Programms
Endlf
ExitSub
errMain:
lfErr<>0Then
MsgBox Beim Starten des Programms ist ein Fehler aufgetreten, 64
ExitSub
Endlf
EndSub
Nachdem der Vorgang abgeschlossen ist, wählen Sie im VB3.0-Hauptmenü [Optionen] den Menüpunkt [Projekt] und setzen Sie den Punkt [StartupFrom] auf Submain, d. h. wenn das Programm ausgeführt wird, startet es zuerst von der Submain-Unterroutine. Dadurch wird sichergestellt, dass der obige Code ausgeführt wird. Submain ist der in VB3.0 vereinbarte Subprozessname und kann nicht durch andere Namen ersetzt werden.
Generieren Sie die EXE-Datei neu, starten Sie die Anwendung im Programmmanager, minimieren Sie dann das generierte Formular und führen Sie es dann im Programmmanager aus. Dem Benutzer wird ein Meldungsfeld angezeigt, das ihm mitteilt, dass die Anwendung beendet wurde. Nach dem Laden wird das zweite Programm beendet Ausführung. Das obige Programm wird nur verwendet, um das Laden des zweiten Programms zu verhindern, es wird jedoch nicht automatisch in das erste Programm aufgenommen, wenn das zweite Programm nicht gestartet werden kann. Um dies zu erreichen, sind die Verfahren relativ komplex und werden hier nicht im Detail vorgestellt.
2. Bestimmen Sie den Installationspfad von Windows
In der von uns entwickelten Software rufen wir manchmal direkt kleine von Windows bereitgestellte Anwendungen auf, z. B. Taschenrechner, Planer usw., oder wir müssen einige spezielle Dateien im Windows- oder SYSTEM-Pfad ablegen. Normalerweise wird Windows im Verzeichnis C:WINDOWS installiert, aber Benutzer können den Namen des Home-Verzeichnisses von Windows nach Belieben ändern. Daher müssen wir in unserer Software den Installationspfad von Windows bestimmen. Für dieses Problem stellt Windows zwei API-Funktionen bereit: GetWindowsDirectory und GetSystemDirectory, die die Namen des Windows-Verzeichnisses und des SYSTEM-Verzeichnisses zurückgeben können.
Bereiten Sie dazu eine allgemeine Funktion GetWinDir vor, die den Namen des Windows-Installationsverzeichnisses zurückgibt. Ebenso können Sie GetSysDir schreiben, weggelassen.
Deklarieren Sie API-Funktionen in *.BAS-Moduldateien
DeclareFunctionGetWindowsDirectoryLibKernel(ByValipBufferAsString,ByValnSizeAsInteger)asIntegerFunctionGetWinDir()AsStringDimWindir$Windir$=Space$(144)'144 ist die theoretische maximale Länge des WINDOWS-Verzeichnisnamens.
lfGetWindowsDirectory(Windir$,144)=0Then
MsgBox kann den Installationspfad von WINDOWS, 16 nicht ermitteln
GetWinDir=
Anders
Windir$=ALLTrim$(Windir$)
ifRight$(Windir$,1)<>“/“thenWindir$=Windir$ „/“
'Backslash hinzufügen
GetWinDir=Windir$
Endlf
EndFunction
ALLTRIM ist eine Funktion zum Entfernen von Nullzeichen in einer Zeichenfolge.
FunctionALLTrim(FatStr$)AsString
'thisFunctiondeleteSpacecharinstringofFatStr$
DimSlimStr$,I
SlimStr$=FatStr$
I=lnStr(SlimStr$,Chr$(0))'Die Position des Raums
IfIThenSlimStr$=Left$(SlimStr$,I-1)
SlimStr$=Ltrim$(Rtrim$)(SlimStr$))
AIITrim$=SlimStr$
EndFunction
3. Aufforderung zum Speichern der Daten vor dem Schließen des Formulars
Im Allgemeinen gibt es fünf Möglichkeiten, eine Anwendung zu schließen:
1. Der Benutzer wählt den Befehl [Schließen] in der ControlBox des aktuellen Formulars.
2. Stimulieren Sie den Endbefehlscode im Programm (z. B. Ende, Entladen).
3. Beenden Sie Windows
4. Schließen Sie die Anwendung in der Windows-Aufgabenliste.
5. Während des Vorgangs mit mehreren Dokumenten führt das Schließen des Haupt-MDI-Formulars dazu, dass auch das Unter-MDI-Formular geschlossen wird.
Bevor wir eine Anwendung schließen, müssen wir dem Benutzer die Möglichkeit geben, die Frage „Möchten Sie Daten speichern?“ zu stellen oder den Vorgang „Schließen“ abzubrechen. In VB löst das Schließen des Formulars das Ereignis Form_Unload aus. Wir können dieses Ereignis so programmieren, dass es den Vorgang „Schließen“ steuert. Vorausgesetzt, dass es bereits eine Prozedur gibt, die FileSave zum Speichern von Dateien verwendet, können Sie das Programm wie folgt schreiben.
SubForm_Unload(CancelAsInteger)
selectcastMsagbox("Daten speichern?", 3 32)
„Ja, Nein, Cnacel drei Optionen.“
case6'JA
„FileSave“ speichert Daten
case2'cancel
Cancel=TRUE'Bricht den Schließvorgang ab
caseelse'NO' speichert nicht, Herunterfahren durchführen
Endauswahl
EndSub
Die Abbruchvariable im obigen Code ist eine inhärente ausgehende Variable des Form_unload-Ereignisses selbst. Sie übermittelt Nachrichten an den Windows-Steuerungsprozess, um die Richtung des Programms zu steuern.
Die oben genannten drei Beispiele sind nur einige kleinere Probleme im Prozess der Softwareverbesserung. Um die Software stabil und zuverlässig zu machen, muss viel sorgfältige und sorgfältige Arbeit geleistet werden. Einige Probleme lassen sich lösen, indem man das Potenzial von VB selbst erforscht und die Betriebsfähigkeiten einiger Prozesse gründlich beherrscht, während einige komplexere Probleme die zugrunde liegenden Vorgänge von Windows betreffen und mithilfe von Windows-API-Funktionen leicht realisiert werden können. Dies setzt natürlich ein gewisses Verständnis der Funktionen und Mechanismen von Windows voraus. Wenn sich das Niveau der Windows-Programmierung verbessert, werden wir nach und nach lernen und gerne API-Funktionen verwenden, um die Programmcodierung zu vervollständigen. ->