function GIT: IGlobalInterfaceTable;
const
  GITIntf: IGlobalInterfaceTable = nil;
begin
  if not Assigned(GITIntf) then
    GITIntf := CreateComObject(CLSID_StdGlobalInterfaceTable) as IGlobalInterfaceTable;
  Result := GITIntf
end;
问题如题
在好几本书上都有类似的的代码,不知道是不是对OBJECT PASCAL修改过以后不支持这样的语法了.
我明知道CONST类型的不可以赋值,但是好些书上都有这样的,但是今天在计算机用的时候却通不过,不知道各位有什么变通的方法

解决方案 »

  1.   

    在implementation设置为内部变量:implementationvar
      GITIntf: IGlobalInterfaceTable = nil;function GIT: IGlobalInterfaceTable;
    begin
      if not Assigned(GITIntf) then
        GITIntf := CreateComObject(CLSID_StdGlobalInterfaceTable) as IGlobalInterfaceTable;
      Result := GITIntf
    end;
      

  2.   

    //参考如下代码:
    uses ActiveX, ComObj;const
      CLSID_StdGlobalInterfaceTable: TGUID = '{00000000-0000-0000-0000-000000000000}'; //测试用function GIT: IGlobalInterfaceTable;
    {$J+}
    const
      GITIntf: IGlobalInterfaceTable = nil;
    {$J-}
    begin
      if GITIntf = nil then
        GITIntf := CreateComObject(CLSID_StdGlobalInterfaceTable) as IGlobalInterfaceTable;
      Result := GITIntf
    end;
      

  3.   

    呵,我知道是怎么回事了
    回:  
     cngram(阿琦) ( ) 信誉:100    Blog  2006-12-15 11:06:20  得分: 0  
       用var, 为什么非要用const?

      好像是CONST声明在一个函数中,这样的变量可以在堆中分配内存,而VAR在函数中只是栈中分配,栈中的内存在调用完函数就消失了,而堆中不一样,这样一来,可以在函数中声明一个全局的变量,就好像是BASIC语言中的STATIC变量一样:)
    用VAR破坏了对象的封装性,每个函数都可以访问它.
    这是在<DELPHI设计模式>中提到的,它的单例模式中用到了这样的技术.
    ---------------
    我刚才也找了一个COMPLIER DIRECTIVE的东西,刚发现是$J+的问题,谢谢了,呵呵,为什么不发贴怎么想也想不出,一发后就自己找到答案了呢??仍然对zswang(伴水清清)(专家门诊清洁工) 的热情
    表示严重感谢,分数不多,请笑纳