Hur kommer jag åt och definierar ett requestobjekt (Det som finns i ASP, vet inte vilken DLL det är).
Jag vill alltså skicka med ett requestobjekt som argument till en subrutin. Så vad definierar jag den som (as ???)? Och vad måste jag länka in för att det skall fungera?
Är det luddigt? I sånna fall säg till så skriver jag en gång till.
Vi talar om att komma åt requestobjektet inifrån en activeX-dll, eller?
Isåf:
1. Lägg till "Microsoft Active Server Pages Object Library" under "References" i ditt projekt.
2. Lägg till ett par variabler i din klasskod:
Private MyScriptingContext As ASPTypeLibrary.ScriptingContext
Private MyRequest As ASPTypeLibrary.Request
3. Lägg till denna funktion i din klass:
Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
Set MyScriptingContext = PassedScriptingContext
Set MyRequest = MyScriptingContext.Request
End Sub
Nu har du en referens till requestobjektet i "MyRequest" som du kan använda i hela din klass. Har du behov av övriga (Session, Application, Response ..) så kan du få dessa via "MyScriptingContext" (MyScriptingContext.Session osv ..)
4. Gå in under "Project - Properties" och kryssa i "Unattended execution" och "Retained in memory". Vet inte om det är absolut nödvändigt men jag har för mig att dll:en samsas bättre med IIS:en då.
Men jag har också märkt att jag inte kan anropa mitt objekt i någon annan sub, den säger att objektet inte är satt. Subben som jag försöker att anropa objektet i är public, vilket också objektet är.
Jag märkte det genom att deklarera en variabel i klassen och sedan tilldela den en text i OnStartPage, när jag initierar klassen så finns texten i variabeln.
Jag deklarerar inte om ojektet någonstans, det enda stället jag gör någonting med det är när jag deklarerar det publikt i klassen, och sedan tilldelar Response-objektet.
En annan sak är att OnStartPage bara körs när du skapar en instans av klassen på en asp-sida. Skapar du en instans i en annan klass så fungerar det inte. Jag löste det genom att göra en bypassfunktion i mellanklassen (den som anropas av asp-sidan), som i sin tur anropar den klassen som funktionen ligger i.
Gör jag rätt, eller finns det något smartare sätt?
Bra fråga. För att OnStartPage ska fyras av så skulle jag tro att objekt måste instansieras i rätt kontext dvs via Server.CreateObject och inte via new eller enbart CreateObject.
Du kan ju få tillgång till Server-objektet i din första klass via:
Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
Set MyScriptingContext = PassedScriptingContext
Set MyRequest = MyScriptingContext.Request
Set MyServer = MyScriptingContext.Server
End Sub