木子屋 Dnawo's BLOG

分析为何Dvbbs8.1后获取不到Dvbbs.CacheName

👤 dnawo 📅 2008-06-09 👁 4667 👍 0 💬 0 🔄 本站原创
下边代码在Dvbbs7.1和8.0中均能正常获取到Dvbbs.CacheName的值为DvCache:

<!--#include file="Dv_ClsMain7.1.asp" -->
<%
Set Dvbbs = New Cls_Forum
Response.Write(Dvbbs.CacheName)
%>

但在Dvbbs8.1和8.2中却运行出错:

Microsoft VBScript 运行时错误 错误 '800a01a8'

缺少对象: 'Dvbbs'

/Dv_ClsMain8.1.asp,行 2013

查看Dv_ClsMain.asp,发现从8.1开始Cls_Forum类的代码有了些不同:

从8.1开始,将原先Class_Initialize函数中的内容放到了PageInit函数中,并在页面末尾增加了一句:Dvbbs.PageInit()!

也就是说,将原先实例化时自动初始化过程改为了人为初始化,这样类的实例化(Dvbbs的声明)就必须放在包含文件之上,否则Dvbbs.PageInit()一句将出错,上面出错正是由于这个原因,OK,将上边代码顺序做相应修改即可:

<%
Set Dvbbs = New Cls_Forum
%>
<!--#include file="Dv_ClsMain8.2.asp" -->
<%
Response.Write(Dvbbs.CacheName)
%>

为什么要将自动初始化改为人为初始化?有点费解。

QQ上请教了老迷,老迷如是说:

(2008-06-12 11:32:08) 迷城浪子
容易导致崩溃。
(2008-06-12 13:45:22) 迷城浪子
因为是VBS类,那个自动执行的函数里执行的操作太多。
(2008-06-12 13:45:31) 迷城浪子
很容易导致脚本引擎异常。

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 C#中的Asc和Chr函数 下一篇 → 借用DataSet将XML读取到DropDownList