一ActiveX Dll,在访问asp页面的时候调用。
web server在windows2000 server上运行
1)我在该dll里定义一个class module,命名test1.cls,然后添加一个模块test.bas,
在test.bas里定义Global gblTest1 as test1
在test2.cls的Initialize事件里,初始化gblTest1
if gblTest1 is nothing then
    set gblTest1=new test1
end if
然后在页面里多次访问(很频繁)该dll,
现象:每次做CreateObject("mydll.test2")的时候都会做set gblTest1=new Test1的操作。意思就是上次new过后下次刷新后该全局变量没有保存(或者内存被释放了),
2) 如果我把该dll放到一台window2000 professionall的机器里运行。那么只有第一次的时候会new一个变量,以后刷新都不会再去new这个变量
3) 如果定义一个全局的String 变量,下次刷新时该变量的值都会存在的。所以本人一直很困惑。在这里请教高手,有什么解决办法,能让该全局类变量一直保存在内存里。

解决方案 »

  1.   

    我仔细看了你的写法,还是你的写法上可能有问题,导致每次createobject时去set new(对象实际上根本没有被全局化),具体原因我一时无法说清,我是这样写的在DLL中建一个管理全部DLL的对象(class)如App.cls,在这个对象中映射其它所有的对象private const mCompanyLib="class_company.clscompany"   '对象的名称即工程名.类名private mCompanyInfo as object  '建立一个对象
    public property get CompanyInfo object
         if mcompanyinfo is nothing then 
            set mcompanyinfo=createobejct(mcompanylib,comservername)
            '可传入一些参数
         endif
         set companyinfo=mcompanyinfo
    end property 以上这个属性是被客户端所调用,以下是客户端代码
    dim gAppObject as object'是建立主DLL对象
    set gAppObject=createobject("class_App.clsApp",comservername)
    call gappobject.companyinfo.方法(执行这条语句时,如果companyinfo对象为nothing,就会去新建一个,如果有了就不会去建,我跟踪过绝对正确)如有不清楚,我的MSN:[email protected]
      

  2.   

    to  davidlv(断刀客) 
    非常感谢您的帮忙对象肯定已经全局化,我在我自己的机器上运行只会new一次(windows2000 professional)不知道您试的时候用的是什么OS,windows2000 server or later?