webForumDet fria alternativet

Request-objekt --> DLL

16 svar · 504 visningar · startad av Vide

VideMedlem sedan dec. 19996 094 inlägg
#1

Hej,

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. ;)

Mvh, Vide

nikoMedlem sedan juni 20022 415 inlägg
#2

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å.

VideMedlem sedan dec. 19996 094 inlägg
#3

Tackar, väldigt bra svar, skall testa det! :D

Mvh, Vide

VideMedlem sedan dec. 19996 094 inlägg
#4

Hur anropar jag sedan Subben OnStartPage?

nikoMedlem sedan juni 20022 415 inlägg
#5

Det gör du inte. Det gör IIS:en åt dig.

VideMedlem sedan dec. 19996 094 inlägg
#6

Märkte det :e

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.

??

nikoMedlem sedan juni 20022 415 inlägg
#7

Märkte det

Hur märkte du det? Om objekten inte är satta så tyder det ju tvärtom på att OnStartPage inte har körts?

Subben som jag försöker att anropa objektet i är public, vilket också objektet är.

Om objektet och subben är private eller public är inte intressant. Du har inte råkat definiera om dom som lokala inne i en sub?

VideMedlem sedan dec. 19996 094 inlägg
#8

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.

nikoMedlem sedan juni 20022 415 inlägg
#9

? ?

I så fall har jag ingen aning. Om den säger att objektet inte är satt så måste du ju ha gjort nåt misstag vid deklarationen?

Har du nån kod?

VideMedlem sedan dec. 19996 094 inlägg
#10

Skumt, nu lade jag in utskrivningen i en egen sub, och nu fungerade det. :)

nikoMedlem sedan juni 20022 415 inlägg
#11

OK? Fast i motsats till döden och oäkta barn så kommer ju inte felmeddelanden av sig själv. Nånstans måste ju ett kodfel ha funnits?

VideMedlem sedan dec. 19996 094 inlägg
#12

Ja, det antar jag också, men vad det kan var fattar jag inte, objektet påverkas ju inte någonstans. :l

VideMedlem sedan dec. 19996 094 inlägg
#13

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?

nikoMedlem sedan juni 20022 415 inlägg
#14

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

och sen instansiera via:

    Set MySecondObject=MyServer.CreateObject( ..

.. känns rätt logiskt iaf ..

VideMedlem sedan dec. 19996 094 inlägg
#15

Man vill ju ha samma context så att säga, inte två uppsättningar av samma context. Kör man Set så blir det väl en till instans, eller?

nikoMedlem sedan juni 20022 415 inlägg
#16

Kör man Set så blir det väl en till instans, eller?

Nä. Det blir ytterligare en referens till samma kontext.

VideMedlem sedan dec. 19996 094 inlägg
#17

Ah, det är klart... :)

Tackar!

Genererad på 362 ms · cache AV · v20260730165559-full.f96bc7eb