Bygg din första dll-komponent
Förord
Det kan tyckas svårt att lära sig att bygga en egen ActiveX DLL och använda den tillsammans med ASP, men så svårt är det faktiskt inte. För att göra det enkelt och tydligt så tänkte jag ta en helt vanlig funktion som jag tidigare skrivit i Visual Basic, göra i ordning den och sedan använda den i mitt asp-program.Då sätter vi igång genom att starta VB och till skillnad från att skapa en standard EXE fil så skall vi istället starta ActiveX DLL. När vi startat detta nya program så finns det Project1(Project1) - en Class Module som heter Class1(Class1). Vi börjar med att byta namn på dessa så det blir lite mer överskådligt.
Klicka på Project1och i Properties så döper vi om Project1 till webb. Sedan klickar du på Class1 och döper den till dates. Nu väljer du via menyn Project|webb properties och fliken Make. Se till att det i Threading Model står Apartment Threaded.
Nu tar vi och skapar våran första funktion. Det gör du genom att direkt skriva några funktioner. Jag har tagit några vanliga varianter, klistra in koden eller ännu bättre, skriv den själv.
Vi tar också med en lite annorlunda funktion som också skall in i samma klass. En funktion där du skickar in ett värde också till skillnad från de andra tre. Som du ser så har jag deklarerat invärdet med ByVal - och det är viktigt att du också gör det för alla parametrar som du kan tänka dig vilja använda som inparametrar i alla olika funktioner.
Spara projektet och kompilera denna till en DLL
Nu har vi fyra funktioner och det bör räcka för en demonstration. Nu tar du och kompilera denna. Som du ser så står det i menyn File - make webb.dll, placera den förslagsvis i c:\inetpub\components så du har alla komponenter samlade på en och samma plats. Källkoden kan du placera i mappen c:\inetpub\components\source så har du även där kontroll på alla dina filer för varje dll.
Nu när du kompilerat din DLL så skall vi också registrera den i registry. Om du inte gör det så kommer inte ASP att kunna hitta ditt objekt när det sedan används på en asp-sida. Då får du felmeddelandet. ActiveX Can't create object.
Du registrerar genom att gå till kommando-prompten:
c:\>regsvr32 c:\inetpub\components\webb.dll
Nu är din dll registrerad och kan börja användas på en asp-sida. Därför skriver vi ett litet script som vi använder för att se om det fungerar som vi tänk oss. Nu finns det fyra funktioner i klassen dates, dessa är:
Nu är sidan klar och du kan exempelvis spara den som test.asp i katalogen c:\inetpub\wwwroot. När du nu testkör din sida, förslagsivs genom att skriva: http://localhost/test.asp så bör följande sida visas:
Testa min webb-dll
Idag 2001-09-16
I morgon 2001-09-17
I går 2001-09-15
Om 8 dagar 2001-09-23
Ända din dll och kompilera om
När du sedan sätter igång och bygger om dina klasser i DLL'en för att testa på din webbserver så kommer du att märka att du inte får kompilera den för att den används. Genom att stänga av IIS servern kan du sedan kompilera, och slutligen starta om IIS-servern igen.
Med dessa dos-kommandon (cmd) så kan du stanna och starta din IIS på ett enkelt sätt. Skriv stop, därefter kompilerar du om och återstartar med start-kommandot:
· net stop w3svc
· net start w3svc
För Personal Webbserver (PWS) gäller istället följande:
· pws /stop
· pws /start
(Obs! om du döpt om din IIS webbserver till något annat namn så måste du skriva det istället. En standardinstallation för WinNT/2000 har namnet w3svc). Se Q236166 för info om net start och net stop.
Om allting fungerat som det skulle så har du nu skrivit din första DLL som du använder tillsammans med ASP, så svårt var det väl inte.
När du nu sedan skriver både en, två och 10 DLL-er så kan det vara bra att veta hur man tar bort dom igen. Det kan ju tänkas att du skapar en annan dll- med mer finesser och andra funktioner. Innan du fysiskt raderar din dll så ser du till att avregistrera den i registry. Det gör du via kommando-prompten:
c:\>regsvr32 / u c:\inetpub\components\webb.dll
Avslutningsvis
För att jag skall veta om kursen är bra eller om den måste skrivas om så rösta gärna här uppe till höger. Skicka gärna ett iMail om du vill kommentera något som är felaktigt eller du tycker borde förtydligas.
/Pelle Johansson
Klicka på Project1och i Properties så döper vi om Project1 till webb. Sedan klickar du på Class1 och döper den till dates. Nu väljer du via menyn Project|webb properties och fliken Make. Se till att det i Threading Model står Apartment Threaded.
Börja skriva vb-programmet
Nu tar vi och skapar våran första funktion. Det gör du genom att direkt skriva några funktioner. Jag har tagit några vanliga varianter, klistra in koden eller ännu bättre, skriv den själv.
Function Today()
Today = Now
End Function
Function Tomorrow()
Tomorrow = DateAdd("d", 1, Now)
End Function
Function Yesterday()
Yesterday = DateAdd("d", -1, Now)
End Function
Vi tar också med en lite annorlunda funktion som också skall in i samma klass. En funktion där du skickar in ett värde också till skillnad från de andra tre. Som du ser så har jag deklarerat invärdet med ByVal - och det är viktigt att du också gör det för alla parametrar som du kan tänka dig vilja använda som inparametrar i alla olika funktioner.
Function DaysFromNow(ByVal days As Long)
DaysAhead = DateAdd("d", days, Now)
End Function
Spara projektet och kompilera denna till en DLL
Nu har vi fyra funktioner och det bör räcka för en demonstration. Nu tar du och kompilera denna. Som du ser så står det i menyn File - make webb.dll, placera den förslagsvis i c:\inetpub\components så du har alla komponenter samlade på en och samma plats. Källkoden kan du placera i mappen c:\inetpub\components\source så har du även där kontroll på alla dina filer för varje dll.
Gör den nåbar från ASP
Nu när du kompilerat din DLL så skall vi också registrera den i registry. Om du inte gör det så kommer inte ASP att kunna hitta ditt objekt när det sedan används på en asp-sida. Då får du felmeddelandet. ActiveX Can't create object.Du registrerar genom att gå till kommando-prompten:
c:\>regsvr32 c:\inetpub\components\webb.dll
Dags att börja med asp-sidan
Nu är din dll registrerad och kan börja användas på en asp-sida. Därför skriver vi ett litet script som vi använder för att se om det fungerar som vi tänk oss. Nu finns det fyra funktioner i klassen dates, dessa är:
· dates.Today
· dates.Tomorrow
· dates.Yesterday
· dates.DaysAhead
<%
' instansiera vår dll genom att använda createobject
Dim Dates
Set Dates = Server.CreateObject("webb.dates")
%>
Testar webb.dll
Testa min webb-dll
Dagens datum:
<%=Dates.Today%>
I morgon:
<%=Dates.Tomorrow%>
I morgon:
<%=Dates.Yesterday%>
Idag + 8 dagar framåt:
<%=Dates.DaysFromNow(8)%>
<%
' frigöra objektet från minnet
Set Dates = Nothing
%>
Nu är sidan klar och du kan exempelvis spara den som test.asp i katalogen c:\inetpub\wwwroot. När du nu testkör din sida, förslagsivs genom att skriva: http://localhost/test.asp så bör följande sida visas:
Testa min webb-dll
Idag 2001-09-16
I morgon 2001-09-17
I går 2001-09-15
Om 8 dagar 2001-09-23
Ända din dll och kompilera om
När du sedan sätter igång och bygger om dina klasser i DLL'en för att testa på din webbserver så kommer du att märka att du inte får kompilera den för att den används. Genom att stänga av IIS servern kan du sedan kompilera, och slutligen starta om IIS-servern igen.
Med dessa dos-kommandon (cmd) så kan du stanna och starta din IIS på ett enkelt sätt. Skriv stop, därefter kompilerar du om och återstartar med start-kommandot:
· net stop w3svc
· net start w3svc
För Personal Webbserver (PWS) gäller istället följande:
· pws /stop
· pws /start
(Obs! om du döpt om din IIS webbserver till något annat namn så måste du skriva det istället. En standardinstallation för WinNT/2000 har namnet w3svc). Se Q236166 för info om net start och net stop.
Om allting fungerat som det skulle så har du nu skrivit din första DLL som du använder tillsammans med ASP, så svårt var det väl inte.
Glöm inte att rensa bort gamla dll-er
När du nu sedan skriver både en, två och 10 DLL-er så kan det vara bra att veta hur man tar bort dom igen. Det kan ju tänkas att du skapar en annan dll- med mer finesser och andra funktioner. Innan du fysiskt raderar din dll så ser du till att avregistrera den i registry. Det gör du via kommando-prompten:c:\>regsvr32 / u c:\inetpub\components\webb.dll
Avslutningsvis
För att jag skall veta om kursen är bra eller om den måste skrivas om så rösta gärna här uppe till höger. Skicka gärna ett iMail om du vill kommentera något som är felaktigt eller du tycker borde förtydligas.
/Pelle Johansson
Hobbe Husman
Tjena, Skitbra artikel... men jag får inte nedanstående att fungera. Kan stoppa IIS, men får fortfarande felmeddelandet "permission denied xxx.dll", när jag ska make:a den... Har även testat att döda processen, samt avregistrera Dlln... har även kollat rättigheter för filen samt mappen. Använder Wind XP pro... MvH, HObbe "Ända din dll och kompilera om När du sedan sätter igång och bygger om dina klasser i DLL'en för att testa på din webbserver så kommer du att märka att du inte får kompilera den för att den används. Genom att stänga av IIS servern kan du sedan kompilera, och slutligen starta om IIS-servern igen. Med dessa dos-kommandon (cmd) så kan du stanna och starta din IIS på ett enkelt sätt. Skriv stop, därefter kompilerar du om och återstartar med start-kommandot: "
Daniel Melin
skön artikel.. lyckades bygga en komponent som validerar personnummer utifrån den här guiden :)