ASP-Vorlesung 10: Komponenten selbst schreiben
Autor:Eve Cole
Aktualisierungszeit:2009-05-30 19:54:53
Im vorherigen Inhalt haben wir gelernt, wie man Komponenten verwendet. Obwohl es viele Komponenten im Internet gibt, müssen Sie für eine kleine Komponente oft US-Dollar ausgeben, und es gibt zu wenige im Inland hergestellte Komponenten. Sie können den Ort nicht finden, vergessen Sie es, schreiben Sie es einfach selbst. Es geht nur darum, mit dem Schreiben von Komponenten auf niedriger Ebene zu beginnen und langsam mit dem Schreiben von Komponenten auf hoher Ebene zu beginnen. Zum Schreiben von ActiveX-Serverkomponenten stehen viele Tools zur Auswahl: Visual Basic, C++, Java usw. Hier wählen wir das einfachste VB6.0. Sofern Sie zuvor VB verwendet haben, können Sie eines in weniger als einer Stunde erstellen . Das Widget kommt heraus.
1. Schnelles Schreiben von Komponenten – die grundlegendsten Schritte zum Schreiben von Komponenten. Wenn Sie mehr erfahren möchten, lesen Sie bitte den Abschnitt „Erstellen von ActiveX-DLLs“ in der VB6.0-Hilfe Dokument (Dokumentation in der MSDN-Bibliothek. Der Dateiname ist Vbcon98.chm).
Zweck: Schreiben Sie die einfachste Addiererkomponente. Diese Komponente verfügt über zwei Eigenschaften und eine Methode. Beginnen wir an der bekanntesten Stelle, nämlich anzunehmen, dass diese Komponente bereits vorhanden ist, und schauen uns den Code an, der diese Komponente in ASP verwendet:
<%
Dim objSum
„Erstellen Sie zuerst die Komponente. Die Komponentenkennung lautet TestDll.Sum.“
Setze objSum = Server.CreateObject("TestDll.Sum")
'Erinnern Sie sich an „TestDll“, „Sum“ in TestDll.Sum.
objSum.augend = 10.52 'augend-Attribut ist der Summand
objSum.addend = 382.41 'Addend-Attribut ist der Addend
Ergebnis = objSum.Plus 'Plus Methodensumme
Response.Write-Ergebnis
Setze objSum = Nothing
%>
Bitte merken Sie sich unbedingt diese Schlüsselwörter: TestDll, Sum, augend, addend, Plus, die in engem Zusammenhang mit der nächsten Arbeit stehen. Hier sind die detaillierten Schritte:
1. Führen Sie VB6.0 aus, klicken Sie im Menü „Datei“ auf „Neues Projekt“ → doppelklicken Sie im Dialogfeld „Neues Projekt“ auf das Symbol „ActiveX-DLL“ → Visual Basic fügt dem neuen automatisch ein Klassenmodul hinzu Projektklasse1 (zu sehen im „Projekt-Explorer“, wie in Abbildung 1 dargestellt).
2. Drücken Sie die Taste F4, um das Eigenschaftenfenster zu öffnen. Doppelklicken Sie auf das Attribut „Name“ und ändern Sie „Klasse1“ in „Summe“.
3. Klicken Sie im Menü „Projekt“ auf „Projekt 1-Eigenschaften“, um das Dialogfeld „Projekteigenschaften“ zu öffnen. Geben Sie TestDll in „Projektname“ und „ActiveX-DLL-Beispiel erstellen“ in „Projektbeschreibung“ ein. Wie in Abbildung 2 dargestellt.
Tipp: Verstehen Sie die Bedeutung der beiden Bezeichner TestDLL.Sum in der ASP-Erstellungskomponente?
4. Klicken Sie im Menü „Datei“ auf „Projekt speichern“ und speichern Sie die Projektdateien unter den folgenden Namen: SetupDll.cls und SetupDll.vbp.
5. Erstellen Sie Eigenschaften für die Sum-Klasse:
(1) Wählen Sie im Menü „Extras“ die Option „Prozess hinzufügen“, um das Dialogfeld „Prozess hinzufügen“ zu öffnen. Geben Sie im Feld „Name“ augend ein, klicken Sie auf „Eigenschaften“ und dann auf „OK“, wie in Abbildung 3 dargestellt (Hinweis: Der aktuelle Fokus sollte auf dem Codefenster liegen, andernfalls ist das Menü „Prozedur hinzufügen“ ungültig ).
(2) Wählen Sie im Menü „Extras“ die Option „Prozess hinzufügen“, um das Dialogfeld „Prozess hinzufügen“ zu öffnen. Geben Sie im Feld „Name“ addend ein, klicken Sie auf „Eigenschaften“ und dann auf „OK“.
6. Erstellen Sie eine Methode für die Sum-Klasse:
Klicken Sie im Menü Extras auf Prozedur hinzufügen, um das Dialogfeld Prozedur hinzufügen zu öffnen. Geben Sie im Feld „Name“ Plus ein. Als Typ können Sie „Unterprogramm“ oder „Funktion“ auswählen. Da Sie in diesem Beispiel die Summe aus Summand und Summand zurückgeben möchten, klicken Sie auf „Funktion“. Klicken Sie auf OK.
Jetzt wurden die fünf Schlüsselwörter im vorherigen ASP-Code verwendet, sodass Sie jetzt viele Dinge verstehen.
7. Alle Codes im Summencodefenster des Klassenmoduls lauten wie folgt:
Option explizit
Privat mdbl_augend als Double
Privates mdbl_addend als Double
Öffentliches Eigentum Holen Sie sich augend() als Double
augend = mdbl_augend
End-Eigenschaft
Öffentliches Eigentum Let augend(ByVal vNewValue As Double)
mdbl_augend = vNewValue
End-Eigenschaft
Öffentliche Eigenschaft Addend() als Double abrufen
addend = mdbl_addend
End-Eigenschaft
Öffentliche Eigenschaft Let addend(ByVal vNewValue As Double)
mdbl_addend = vNewValue
End-Eigenschaft
Öffentliche Funktion Plus()
Plus = Augend + Summand
Funktion beenden
Sie haben bemerkt, dass sich der obige Code geringfügig vom vom System generierten Code unterscheidet, hauptsächlich weil der Teil „Public Property Get augend() As Variant“ durch den tatsächlichen Datentyp „Double“ ersetzt wurde.
Hinweis: Wenn die Anweisung x = objSum.augend ausgeführt wird, wird tatsächlich die Property Get-Prozedur aufgerufen, um den Wert von mdbl_augend zu erhalten. Wenn die objSum.augend = 10.52-Anweisung ausgeführt wird, wird die Property Let-Prozedur aufgerufen und 10.52 zugewiesen zu mdbl_augend.
8. Der letzte Schritt besteht darin, im Menü „Datei“ auf „.Dll(K) generieren…“ zu klicken, um die Datei SetupDll.dll zu generieren.
Zu diesem Zeitpunkt wurde die Komponente erstellt. Jetzt können wir zunächst ein Testprojekt in VB6 schreiben, um zu testen, ob die Datei korrekt ist.
1. Klicken Sie im Menü „Datei“ auf „Neues Projekt“ → doppelklicken Sie auf „Standard EXE“.
2. Klicken Sie im Menü „Projekt“ auf „Referenz“ → Klicken Sie im Dialogfeld „Referenz“ auf die Schaltfläche „Durchsuchen“, wählen Sie die gerade kompilierte Datei „SetupDll.dll“ aus → klicken Sie auf „OK“.
3. Schreiben Sie abschließend den folgenden Code in das Codefenster:
Option explizit
Private Sub Form_Load()
Dimmen Sie objSum als TestDll.Sum
Setze objSum = Neue Summe
objSum.augend = 10,52
objSum.addend = 382,41
MsgBox objSum.Plus
Sub beenden
Führen Sie es aus und das Ergebnis ist korrekt. Als nächstes verwenden wir diese Komponente in ASP. Kopieren Sie SetupDll.dll auf den Webserver, registrieren Sie die Komponente mit dem Befehl „Regsvr32.exe setupdll.dll“ und führen Sie dann das ASP-Programm am Anfang dieses Abschnitts im Browser aus. Wenn dies nicht funktioniert, können Sie zunächst versuchen, es mit dem VB6-Paketierungstool zu packen und es dann zu installieren. Die Komponenten werden automatisch registriert und einige erforderliche VB6-Laufdateien werden ebenfalls automatisch installiert.
Hinweis: Alle Programme in diesem Teil befinden sich in Setupdll.zip des Download-Pakets.
Im obigen Beispiel verwenden wir die Eigenschaftsprozeduren Property Get und Property Let, um Eigenschaften hinzuzufügen (Property Get liest den Wert der Eigenschaft und Property Let weist den Wert der Eigenschaft zu. Wenn Sie den eingestellten Wert überprüfen müssen, können Sie dies tun). Schreiben Sie den entsprechenden Code im Property Let-Prozess. Wie zum Beispiel der folgende Code:
Öffentliches Eigentum Let augend(ByVal vNewValue As Double)
Wenn vNewValue < 100, dann
MsgBox „Was machst du? Wenn der Wert kleiner als 100 ist, rechnen Sie einfach selbst nach.“
Anders
mdbl_augend = vNewValue
Ende wenn
End-Eigenschaft
2. Andere Möglichkeiten zum Hinzufügen von Eigenschaften und Methoden zu Komponenten
1. Der einfachste Weg, Attribute hinzuzufügen: Fügen Sie öffentliche Variablen hinzu. Wie im obigen Beispiel lautet der einfachste Code wie folgt:
Option explizit
Public augend As Double ' Augend-Attribut hinzufügen
Öffentlicher Addend As Double ' Addend-Attribut hinzufügen
Öffentliche Funktion Plus() als Double
Plus = Augend + Summand
Funktion beenden
Diese Methode kann jedoch nur Lese-/Schreibeigenschaften festlegen und den zugewiesenen Wert nicht überprüfen. Wenn Sie nur ein schreibgeschütztes Attribut hinzufügen müssen: Löschen Sie im obigen Beispiel den Prozess „Public Property Let augend(ByVal vNewValue As Double)“, dann wird augend zu einem schreibgeschützten Attribut, dem kein Wert zugewiesen werden kann. Wenn Sie eine schreibgeschützte Eigenschaft hinzufügen möchten, löschen Sie natürlich einfach die Property Get-Prozedur.
2. Verwenden des Klassenerstellungsdienstprogramms
Es gibt auch ein Tool zum Hinzufügen von Eigenschaften und Methoden in VB6: Klicken Sie im Menü „Add-In“ auf „Add-In-Manager“, wählen Sie „VB Class Builder Utility“ im Popup-Dialogfeld „Add-In-Manager“ und Laden Wählen Sie im Verhalten „Laden/Entladen“ (Abbildung 4). Klicken Sie dann im Menü „Add-Ins“ auf „Class Builder Utility“ und Sie erfahren, wie Sie es verwenden.
3. Nennen Sie einige Punkte, auf die Sie achten sollten
1. Das obige Beispiel ist eine äußerst einfache Komponente. Praktischere Komponenten verfügen im Allgemeinen über mindestens ein Modul.
2. Wenn Sie nicht aufpassen, kann Visual Basic „Single-Threaded“-Komponenten erzeugen.
Eine der häufigsten Fallstricke ist möglicherweise die Verwendung von Komponenten, die nicht für die Ausführung unter ASP konzipiert sind, beispielsweise „Single-Threaded“-Komponenten. Stellen Sie daher sicher, dass das Threading-Modul auf der Registerkarte „Allgemein“ der Seite „Projekteigenschaften“ auf „Apartment Threading“ eingestellt ist.
3. Über den Fehler „Typkonflikt“.
Ein guter Vorschlag besteht darin, den Out-Parameter als Variant zu deklarieren. Beachten Sie, dass dieser im obigen Beispiel nicht festgelegt ist.
4. Über die Verwendung globaler Variablen.
Vermeiden Sie die Verwendung globaler Variablen in Komponenten. In Visual Basic ausgedrückt bedeutet dies, dass es in einem Standard-BAS-Modul keine öffentlichen oder globalen Variablen gibt. Weil globale Variablen nicht wirklich global sind. Jeder Thread hat seine eigene Kopie, und wenn mehrere Methoden im selben Thread ausgeführt werden, sehen sie dieselben Variablen, andernfalls greifen sie auf unterschiedliche Kopien dieser Variablen zu. Das bedeutet, dass Sie einer globalen Variablen (in Thread A) einen Wert zuweisen können, ein anderer Benutzer (der in Thread B ausführt) den neuen Wert jedoch nicht sehen kann. Der Grund dafür ist, dass Visual Basic intern „Thread Local Storage (TLS)“ verwendet, um auf globale Variablen zu verweisen. Dies bedeutet, dass jeder Thread über eine eigene Kopie der öffentlichen Variablen verfügt. Da es mehrere Kopien davon gibt, sind die globalen Daten nicht wirklich „global“. Das heißt, Benutzer, die zufällig im selben Thread ausgeführt werden, greifen auf dieselbe Variable zu, unabhängig davon, ob sie dies erwarten oder nicht.
Schließlich führt VB6.0 übrigens einen neuen Typ von Visual Basic-Anwendungen ein: IIS-Anwendungen. Sie können IIS-Anwendungen genauso erstellen wie ActiveX-DLLs. Jede mit Active Server Pages erstellte Anwendung kann in der VB-Entwicklungsumgebung vollständig ersetzt werden.