I have a funciton inVB DLL
Function BuildSqlWhereFromHTML(ByRef AspReq As ASPTypeLibrary.Request, _
ByRef AspSes As
ASPTypeLibrary.Session) As String
Don't access built-in objects like that. Use this instead;
----
How do I access the built-in ASP objects from VB?
When using IIS3 the only way to get a handle on the built-
in ASP objects was via the ScriptingContext. When you use
Server.CreateObject, ASP would call the OnStartPage method
of your object and pass in a ScriptingContext object.
Using that object you could then get a reference to the
built-in ASP objects.
Private objScript As ScriptingContext
Sub OnStartPage(obj As ScriptingContext)
Set objScript = obj
End Sub
Sub DoSomething()
Dim objResponse As ASPTypeLibrary.Response
Set objResponse = objScript.Response
objResponse.Write "<p>Hello World</p>"
End Sub
IIS4 and IIS5 provide this same functionality for backward
compatibility but you shouldn't use it. Instead you should
get a handle on the built-in objects using the object's
ObjectContext. Objects created in ASP are given their own
context and you can choose to hook into that context if
you want to. In your VB Object Add a reference to COM+
Services if you are using Win2k, or to MTS if you are
using Windows NT, and a reference to Microsoft Active
Server Pages Object Library. Although we are adding a
reference to MTS/COM+ you don't actually need to register
the DLL with MTS, or register it as a configured component
under Win2k. The reason being is that, under the covers,
your scripts are running in the MTS environment anyway,
we're just choosing to utilise it. If you do want to add
your component to MTS/COM+ then that is fine too. The
thing to note is that you can add the object to MTS or you
can leave it as a normal DLL, using this technique does
not restrict your deployment choices.
In our VB code the built-in ASP objects are held in the
Items collection of the ObjectContext. Getting a handle on
them is a simple matter of;
Dim objResponse As ASPTypeLibrary.Response
Set objResponse = GetObjectContext.Item("Response")
We can now use objResponse just as we would the Response
object in ASP. Below is a small demo
ContextTest1.asp
<%@ Language=VBScript %>
<HTML>
<BODY>
<%
if len(trim(Session("FullName"))) > 0 then
Response.Write "<p>I remember your name as " &
Session("FullName") & "</p>"
end if
%>
<FORM action="ContextTest2.asp" method=POST>
Surname: <input type="text" name="txtSurname"><br>
Forename: <input type="text" name="txtForename"><br>
<input type="submit" value="Submit">
</FORM>
ContextTest2.asp
<%@ Language=VBScript %>
<%
set obj = Server.CreateObject("ASPObject.ASPClass")
obj.DoStuff
set obj = nothing
%>
VB Code
Create an ActiveX DLL project called ASPObject and add a
class called ASPClass. Add a reference to MTX/COM+ and a
reference to ASP. Inside ASPClass put the following code.
Option Explicit
Public Sub DoStuff()
Dim objResponse As ASPTypeLibrary.Response
Dim objRequest As ASPTypeLibrary.Request
Dim objSession As ASPTypeLibrary.Session
Dim sSurname As String
Dim sForename As String
Dim sFullName As String
Set objResponse = GetObjectContext.Item("Response")
Set objRequest = GetObjectContext.Item("Request")
Set objSession = GetObjectContext.Item("Session")
objResponse.Write "<HTML>" & vbCrLf
objResponse.Write "<HEAD>" & vbCrLf
objResponse.Write "</HEAD>" & vbCrLf
objResponse.Write "<BODY>" & vbCrLf
sSurname = Trim(objRequest("txtSurname"))
sForename = Trim(objRequest("txtForename"))
If Len(sSurname) < 2 Then
sSurname = UCase(sSurname)
Else
sSurname = UCase(Left(sSurname, 1)) & Mid
(sSurname, 2)
End If
If Len(sForename) < 2 Then
sForename = UCase(sForename)
Else
sForename = UCase(Left(sForename, 1)) & Mid
(sForename, 2)
End If
sFullName = sForename & " " & sSurname
objSession("FullName") = sFullName
objResponse.Write "<p>Hello " & sFullName & "</p>" &
vbCrLf
If Len(Trim(objRequest.ServerVariables
("HTTP_REFERER"))) > 0 Then
objResponse.Write "<p><a href=""" &
objRequest.ServerVariables("HTTP_REFERER") & """>Back</a>"
& vbCrLf
End If
objResponse.Write "</BODY>" & vbCrLf
objResponse.Write "</HTML>"
Set objResponse = Nothing
Set objRequest = Nothing
Set objSession = Nothing
End Sub