Conférence ASP 10 : Écrivez vous-même des composants
Auteur:Eve Cole
Date de mise à jour:2009-05-30 19:54:53
Dans le contenu précédent, nous avons appris à utiliser les composants. Bien qu'il existe de nombreux composants sur Internet, un petit composant nécessite souvent de débourser des dollars américains, et il y a trop peu de composants produits dans le pays. vous ne trouvez pas l'endroit, c'est facile, oubliez ça, écrivez-le vous-même. En fait, écrire des composants n'est pas difficile, il suffit de commencer à écrire des composants de bas niveau et de commencer lentement à écrire des composants de haut niveau. Pour écrire des composants serveur ActiveX, vous avez le choix entre de nombreux outils : Visual Basic, C++, Java, etc. Nous choisissons ici le VB6.0 le plus simple. Tant que vous avez déjà utilisé VB, vous pouvez en créer un en moins d'une heure. . Le widget sort.
1. Écriture rapide des composants - les étapes les plus élémentaires pour l'écriture de composants. Cette partie explique principalement les étapes de base pour l'écriture de composants. Si vous souhaitez en savoir plus, veuillez vous référer à la section "Création d'une DLL ActiveX" dans l'aide de VB6.0. document (documentation dans MSDN Library Le nom du fichier est Vbcon98.chm).
Objectif : Écrire le composant additionneur le plus simple. Ce composant a deux propriétés et une méthode. Commençons par le point le plus familier, c'est-à-dire supposer que ce composant existe déjà et regardons le code qui utilise ce composant dans ASP :
<%
Dim objSomme
'Créez d'abord le composant, l'identifiant du composant est TestDll.Sum
Définir objSum = Server.CreateObject("TestDll.Sum")
'Rappelez-vous "TestDll", "Sum" dans TestDll.Sum.
objSum.augend = 10.52 'l'attribut augend est la somme
objSum.addend = 382.41 'l'attribut addend est l'addend
Résultat = objSum.Plus 'Plus la somme de la méthode
Réponse.Écrire le résultat
Définir objSum = Rien
%>
N'oubliez pas ces mots-clés : TestDll, Sum, augend, addend, Plus, qui seront étroitement liés au prochain travail. Voici les étapes détaillées :
1. Exécutez VB6.0, dans le menu "Fichier", cliquez sur "Nouveau projet" → dans la boîte de dialogue "Nouveau projet", double-cliquez sur l'icône "ActiveX DLL" → Visual Basic ajoutera automatiquement un module de classe au nouveau projet Class1 (peut être vu dans "l'Explorateur de Projet", comme le montre la Figure 1).
2. Appuyez sur la touche F4 pour ouvrir la fenêtre Propriétés. Double-cliquez sur l'attribut "Nom" et remplacez "Class1" par Somme.
3. Dans le menu Projet, cliquez sur Propriétés du projet 1 pour ouvrir la boîte de dialogue Propriétés du projet. Remplissez TestDll dans « Nom du projet » et « Créer un exemple de DLL ActiveX » dans « Description du projet ». Comme le montre la figure 2.
Astuce : Comprenez-vous la signification des deux identifiants TestDLL.Sum dans le composant de création ASP ?
4. Dans le menu "Fichier", cliquez sur "Enregistrer le projet" et enregistrez les fichiers du projet sous les noms suivants : SetupDll.cls et SetupDll.vbp.
5. Créez des propriétés pour la classe Sum :
(1) Dans le menu « Outils », sélectionnez « Ajouter un processus » pour ouvrir la boîte de dialogue « Ajouter un processus ». Dans la zone « Nom », entrez augend, cliquez sur « Propriétés », puis cliquez sur « OK », comme le montre la figure 3 (Remarque : le focus actuel doit être sur la fenêtre de code, sinon le menu « Ajouter une procédure » ne sera pas valide. ).
(2) Dans le menu "Outils", sélectionnez "Ajouter un processus" pour ouvrir la boîte de dialogue "Ajouter un processus". Dans la zone Nom, entrez addend, cliquez sur Propriétés, puis cliquez sur OK.
6. Créez une méthode pour la classe Sum :
Dans le menu Outils, cliquez sur Ajouter une procédure pour ouvrir la boîte de dialogue Ajouter une procédure. Dans la case "Nom", saisissez Plus. Dans le type, vous pouvez sélectionner "Sous-programme" ou "Fonction". Dans cet exemple, puisque vous souhaitez renvoyer la somme de l'addend et de la somme, cliquez sur "Fonction" puis cliquez sur Cliquez sur OK.
Maintenant, les cinq mots clés du code ASP précédent ont été utilisés, vous comprenez donc maintenant beaucoup de choses.
7. Tous les codes de la fenêtre Code de somme du module de classe sont les suivants :
Option explicite
Privé mdbl_augend en double
Privé mdbl_addend en tant que double
Propriété publique Obtenez augend() en double
augend = mdbl_augend
Propriété de fin
Propriété publique Let augend (ByVal vNewValue As Double)
mdbl_augend = vNouvelleValeur
Propriété de fin
Propriété publique Obtenez addend() en tant que double
ajouter = mdbl_addend
Propriété de fin
Propriété publique Let addend (ByVal vNewValue As Double)
mdbl_addend = vNouvelleValeur
Propriété de fin
Fonction publique Plus()
Plus = fin + ajout
Fonction de fin
Vous avez remarqué que le code ci-dessus est légèrement différent du code généré par le système, principalement parce que la partie Public Property Get augend() As Variant est remplacée par le type de données réel Double.
Remarque : En fait, lorsque l'instruction x = objSum.augend est exécutée, la procédure Property Get est appelée pour obtenir la valeur de mdbl_augend. Lorsque l'instruction objSum.augend = 10.52 est exécutée, la procédure Property Let est appelée et 10.52 est attribuée. à mdbl_augend.
8. La dernière étape consiste à cliquer sur "Générer .Dll(K)..." dans le menu "Fichier" pour générer le fichier SetupDll.dll.
À ce stade, le composant a été créé. Maintenant, nous pouvons d'abord écrire un projet de test en VB6 pour tester si le fichier est correct.
1. Dans le menu "Fichier", cliquez sur "Nouveau projet" → double-cliquez sur "Standard EXE".
2. Dans le menu "Projet", cliquez sur "Référence" → appuyez sur le bouton "Parcourir" dans la boîte de dialogue "Référence", sélectionnez le fichier "SetupDll.dll" qui vient d'être compilé → cliquez sur "OK".
3. Écrivez enfin le code suivant dans la fenêtre de code :
Option explicite
Sous-formulaire privé_Load()
Dim objSum comme TestDll.Sum
Définir objSum = Nouvelle somme
objSum.augend = 10,52
objSum.addend = 382,41
MsgBox objSum.Plus
Fin du sous-marin
Exécutez-le et le résultat est correct. Ensuite, nous utilisons ce composant dans ASP. Copiez SetupDll.dll sur le serveur Web et utilisez la commande « Regsvr32.exe setupdll.dll » pour enregistrer le composant, puis exécutez le programme ASP au début de cette section dans le navigateur. Si cela ne fonctionne pas, vous pouvez d'abord essayer de le packager avec l'outil de packaging VB6, puis l'installer. Les composants seront automatiquement enregistrés et certains fichiers d'exécution VB6 nécessaires seront également installés automatiquement.
Remarque : Tous les programmes de cette partie se trouvent dans Setupdll.zip du package de téléchargement.
Dans l'exemple ci-dessus, nous utilisons les procédures de propriété Property Get et Property Let pour ajouter des propriétés (Property Get lit la valeur de la propriété et Property Let attribue la valeur à la propriété. Si vous devez vérifier la valeur définie, vous pouvez). écrivez le code approprié dans le processus Property Let. Tel que le code suivant :
Propriété publique Let augend (ByVal vNewValue As Double)
Si vNewValue < 100 Alors
MsgBox "Que faites-vous ! Si la valeur est inférieure à 100, faites le calcul vous-même."
Autre
mdbl_augend = vNouvelleValeur
Fin si
Propriété de fin
2. Autres façons d'ajouter des propriétés et des méthodes aux composants
1. La manière la plus simple d'ajouter des attributs : ajouter des variables publiques, comme dans l'exemple ci-dessus, le code le plus simple est le suivant :
Option explicite
Public augend As Double 'Ajouter un attribut augend
Addend public As Double ' Ajouter un attribut addend
Fonction publique Plus() en tant que double
Plus = fin + ajout
Fonction de fin
Cependant, cette méthode ne peut définir que des propriétés de lecture/écriture et ne peut pas vérifier la valeur attribuée. Si vous devez uniquement ajouter un attribut en lecture seule : dans l'exemple ci-dessus, supprimez le processus Public Property Let augend(ByVal vNewValue As Double), alors augend devient un attribut en lecture seule et ne peut pas se voir attribuer de valeur. Bien entendu, si vous souhaitez ajouter une propriété en écriture seule, supprimez simplement la procédure Property Get.
2. Utilisation de l'utilitaire de création de classes
Il existe également un outil pour ajouter des propriétés et des méthodes dans VB6 : dans le menu "Complément", cliquez sur "Gestionnaire de compléments", sélectionnez "Utilitaire VB Class Builder" dans la boîte de dialogue contextuelle du Gestionnaire de compléments, et charger Sélectionnez "Charger/Décharger" dans le comportement (Figure 4). Cliquez ensuite sur Class Builder Utility dans le menu Compléments et vous saurez comment l'utiliser.
3. Dites-vous quelques problèmes auxquels vous devez prêter attention
1. L'exemple ci-dessus est un composant extrêmement simple. Les composants plus pratiques comportent généralement au moins un module.
2. Si vous n'y prêtez pas attention, Visual Basic peut produire des composants « monothread ».
L'un des pièges les plus courants est peut-être l'utilisation de composants qui ne sont pas conçus pour fonctionner sous ASP, tels que les composants « monothread ». Par conséquent, assurez-vous que le module de threading est défini sur « Apartment Threading » dans l’onglet « Général » de la page « Propriétés du projet ».
3. À propos de l'erreur "incompatibilité de type".
Une bonne suggestion est de déclarer le paramètre Out comme Variant. Notez que cela n'est pas défini dans l'exemple ci-dessus.
4. À propos de l'utilisation de variables globales.
Essayez d'éviter d'utiliser des variables globales dans les composants. En termes Visual Basic, cela signifie qu'il n'y a pas de variables publiques ou globales dans un module .BAS standard. Parce que les variables globales ne sont pas vraiment globales. Chaque thread a sa propre copie, et si plusieurs méthodes sont exécutées dans le même thread, elles verront les mêmes variables sinon elles accéderont à des copies différentes de ces variables ; Cela signifie que vous pouvez attribuer une valeur à une variable globale (dans le thread A), mais qu'un autre utilisateur de celle-ci (exécuté dans le thread B) ne peut pas voir la nouvelle valeur. La raison en est que Visual Basic utilise en interne « Thread Local Storage (TLS) » pour référencer des variables globales. Cela signifie que chaque thread possède sa propre copie de la variable publique et, comme il existe plusieurs copies de celle-ci, les données globales ne sont pas vraiment « globales ». Autrement dit, les utilisateurs qui s'exécutent dans le même thread accéderont à la même variable, qu'ils l'attendent ou non.
Enfin, d'ailleurs, VB6.0 introduit un nouveau type d'application Visual Basic : l'application IIS. Vous pouvez créer des applications IIS tout comme vous créez des DLL ActiveX. Toute application créée avec Active Server Pages peut être créée dans l'environnement de développement VB. Vous pouvez remplacer complètement toutes les pages Active Server par une seule application VB.