比如我的ASP中如
<%Set tests=Server.CreateObject("dllname.tests")
dim bb
bb="avf"tests.test()
%>
而在DLL中有个要用到这个变量bb的sub test()
response.write "test:" & bb
end sub当执行那个ASP时,得不到结果,只显示出test:就没了。
如何将ASP的变量传递到DLL中执行?
别建议用SESSION\COOKIE之类的哦。也别建议用test (str)这样来传递,因为有很多个变量。
<%Set tests=Server.CreateObject("dllname.tests")
dim bb
bb="avf"tests.test()
%>
而在DLL中有个要用到这个变量bb的sub test()
response.write "test:" & bb
end sub当执行那个ASP时,得不到结果,只显示出test:就没了。
如何将ASP的变量传递到DLL中执行?
别建议用SESSION\COOKIE之类的哦。也别建议用test (str)这样来传递,因为有很多个变量。
response.write "test:" & bb
end sub另外,好象如果这些类文件供ASP调用的话,
DLL中不能声明具体变量类型,只能是variant的
这个仅是有这样的印象,不是特别肯定
Set tests=Server.CreateObject("dllname.tests")
dim bb
tests.bb="avf"
tests.test()
%>
<%
Set tests=Server.CreateObject("dllname.tests")
response.write(tests.test("aa"))
%>dll
public function test(byval strinput as string)
test = "test:" & strinput
end function
并且我发现发过来,DLL的变量也无法传递到ASP中。
那么反过来,DLL的变量如何传递给ASP呢?
比如我的ASP中如
<%Set tests=Server.CreateObject("dllname.tests")
tests.test()
response.write bb
%>
而在DLL中有个要用到这个变量bb的sub test()
dim bb
bb="abc"
end sub当执行那个ASP时,得不到结果.
也是很多个变量,难道要一个变量写一个FUNCTION或者SUB啊?
<%
Set tests=Server.CreateObject("dllname.tests")
test.sharevar = "aa"
response.write(tests.test("aa"))
response.write("<br />" & test.sharevar
%>
dll
public sharevar as string
public function test(byval strinput as string)
sharevar = strinput & strinput
test = "test:" & strinput
end function不定数量变量可以用数组、集合。
那么反过来,DLL的变量如何传递给ASP呢?
比如我的ASP中如
<%Set tests=Server.CreateObject("dllname.tests")
tests.test()
response.write bb
%>
而在DLL中有个要用到这个变量bb的sub test()
dim bb
bb="abc"
end sub当执行那个ASP时,得不到结果.
也是很多个变量,难道要一个变量写一个FUNCTION或者SUB?
我想在DLL里做一个检查用户级别的子程序或者函数
每个用户表USERS里有个字段是用户级别,假设为userLevel,如果userlevel=100则为管理员,如果=90则为总版主,如果=80则为版主,如果=70则为普通用户。如果小于50则为冻结的用户。
通过用户的ID来查询出USERLEVEL。
以前在ASP里我这样做
<%
sub ckuser(id)
dim isadmin, isbbsadmin, ismod, isuser,isfreeze,sql
sql="select userlevel from users where id="&id
set rs=conn.execute (sql)
if rs("userlevel")=100 then isadmin=ture
if rs("userlevel")=90 then isBbsadmin=true
if rs("userlevel")=80 then isMod=ture
if rs("userlevel")=70 then isUser=true
if rs("userlevel")<50 then isFreeze=true
end sub
ckuser(22)
if isadmin then
..... '这里执行一系列动作
else
response.write "你没权限操作"
end if
%>这个在ASP中可以执行。可是如果把这个SUB搬去DLL里,在ASP中如下执行则获不到isadmin的值<%
Set tests=Server.CreateObject("classname.testsubs")
tests.ckuser(22)
if isadmin then
..... '这里执行一系列动作
else
response.write "你没权限操作"
end if
%>这样的结果会是“你没权限操作”
请问如何返回正确的isAdmin等的变量呢?当然,我想过用FUNCTION CKUSER(UID),直接返回USERLEVEL的值,但是这样我原有的大量的ASP代码都要修改了。
也想过直接把USERLEVEL保存进SESSION中,可是如果用户量很大的时候,太多SESSION会导致服务器负荷大。
也想过用COOKIE,但是COOKIE不稳定,有的用户反应无法登陆,获取不到COOKIE的值,同时COOKIE做身份认证也不安全。当然,还可以把这个SUB直接用在ASP中,可是用户量太大的话,性能没DLL的好。
public isadmin, isbbsadmin, ismod, isuser,isfreeze,sql
sub ckuser(id)
sql="select userlevel from users where id="&id
set rs=conn.execute (sql)
if rs("userlevel")=100 then isadmin=ture
if rs("userlevel")=90 then isBbsadmin=true
if rs("userlevel")=80 then isMod=ture
if rs("userlevel")=70 then isUser=true
if rs("userlevel")<50 then isFreeze=true
end subasp里面
tests.ckuser(22)
if tests.isadmin then
..... '这里执行一系列动作
else
response.write "你没权限操作"
end if
这是最简单的改法。不过个人觉得,你最好先学习下Basic语法,然后把你的程序推倒从来。这代码实在不好说。
你可以这么写:
Public Const Admin_Level = 100
Public Const BBSAdmin_Level = 90
...
Public Function CheckUser(ByVal UserID As String, ByVal Level As Long) As Boolean
...
sql = "select userlevel from users where id = " & id
Set rs = conn.Execute (sql)
CheckUser = (rs("userlevel") >= Level)
End Function调用:
<%
Set tests = Server.CreateObject("classname.testsubs")
If tests.CheckUser(22, CheckUser.Admin_Evel) Then
..... '这里执行一系列动作
Else
Response.Write "你没权限操作"
End If
%>
除了这样,没其他方法了吗?这样也是导致大量的全局变量。如果这样,我就不如直接用在onstartpage中了。
调用:
<%
Set tests = Server.CreateObject("classname.testsubs")
If tests.CheckUser(22, CheckUser.Admin_Level) Then
..... '这里执行一系列动作
Else
Response.Write "你没权限操作"
End If
%>很多初学者学习编程是从阅读和修改同样是初学者所写的丑陋的代码开始的。
我的建议是从学习语法和算法开始,把基本功打好。
写程序如同盖房子,没有地基到了一定的高度,光靠技巧,也无法让系统不垮掉。
你对系统的驾驭能力就决定了你能写多大的程序。
兄弟,您可能用的是VB.NET吧?我用VB6做的,下面两行无法编译
Public Const Admin_Level = 100
Public Const BBSAdmin_Level = 90
不好所以,我确实是VB新手。
Public BBSAdmin_Level = 90
呢。
Public BBSAdmin_Level As Long
...
在
Sub Class_Initialize() 里面写:
Admin_Level = 100
BBSAdmin_Level = 90
...
我这样写了,也是出错在tests.CheckUser(22, CheckUser.Admin_Level),应该是checkuser.admin_level没获取到值