正在做的一个工程,delphi写的,做改造,原先的结构很乱,我想把常量的定义组织起来程序只用一个define, define里引用若干个subdefine,但是现在似乎有不少问题
首先就是uses, uses能不能继承, 好像如果windows, sysutils之类的系统级的, 就不行,但是自己的引入的就可以,另外,第一级引入就没问题,第二级就不行了,这也就意味着,我不能使用这种分层的define,因为,所有程序中使用的都是哦二级的,我对delphi不熟,因为项目才接触,问题可能比较弱,还望各位不吝赐教

解决方案 »

  1.   

    PA = ^TA;
    Type TA = record
      a:string;
      b:integer;
    end;type TB = record
      a:PA
      b:integer;
    end;
      

  2.   

    楼上可能没明白我的意思项目立会用到许多的常量和结构,他们会在不同的场合得到应用,我们希望对于程序逻辑来说,引用常量只需要uses Define就可以了,这样会比较容易维护,但是如果写在一个Define.pas里显然是不合适的,因为太多了,我理想中的Define.pas应该是由多个子define组合起来的,每个子define实现一个最小功能集,他们应该尽可能是正交的,虽然实际上做不到,但是依赖关系是没有循环的unit Defineinterface uses  ADefine,  
          BDefine,
          CDefine, .. ;end.对于每个子define 
    他们完成相关功能集中的常亮与结构定义比如
    unit ADefineinterface
    uses GeneralDefine,..
    const 
       ...type 
       ...然后对于系统共用的unit,我想把它放在GeneralDefine里,比如windows, sysutils..等等, 还有一些第三方库的引用,我们也希望放在一个单独的Thrdlibrary.pas里
    比如
    unit GeneralDefineinterfaceuses  windows, sysutils, ...
    unit ThrdLibrary.pas
    interfaceuses  ... , ... , ...
    问题,上面已经提到,我就不赘述了
      

  3.   

    在一个define.pas里写,不同的写在别的文件里,然后用{$INCLUDE 'YourFile'}引用进来。{$INCLUDE *}和c/cpp的#include *的作用是一样的
      

  4.   

    是个办法,不过基本上还是太弱了include 几乎就是一个模板,这样的坏处也是显而易见的,你必须使inc与include 它的pas合并起来符合pascal的语法才行,这就意味着,你不能在里面写const
      AA = 1;
      BB = 2;而只能把const去掉
    更麻烦的是,你还不能多写,比如你希望把uses和const 都放在inc里,那就必须是两个inc,更不要说还有var和type 而且,这些依然没有解决传递的问题,这就意味着,你必须自己处理诸多inc里的相互依赖问题,你不能再某个文件里只include某个type.inc,而不引用,包含其中所需常量的某个const.inc类似于
    type aa : array[0..BB_LEN-1] of byte;就会遇到这样的问题。对于一个大型工程的Define来说,我需要很多的常量、类型定义,全局变量,uses,放在一个define里,谁都会眼晕,可是放在多个define里,还是没办法传递,唯一的解决办法,就是平行分割出n个独立功能集,彼此绝无依赖,但是这往往是不现实的,很简单的一个type
      TArrayByte: array of byte;
    我就要在不同的define里分别定义,那么如果我在一个程序文件里引用两个以上的define(这几乎是很自然的),那么我就要遇到类型重复定义的问题,好麻烦,而且,说实话{$include}这样的语法,和程序结构简直格格不入不知道delphi管理大工程是怎么做的,反正我觉得这样是不可以的,对自己和后来者,都是灾难,我就深有体会,因为这个项目本就是就有项目的改造
      

  5.   

    常量定义本来就都该扔一个单元里,你嫌太多可以掰成数个小文件,然后再include到一个单元里,所有的单元都统一引用那个用来定义常量和类型的单元
    别用c/cpp的思路设计delphi,c/cpp的掰着扔可能会加快点儿编译速度,delphi的话没必要
      

  6.   


    曾經用過的  分成多個單元去定義的全局變量,公用函數,等等。。
      
      定義多個接口,實現方法。  (解決多重繼承做準備)  定義一個類或多個,你愛吧   模仿JAVA中的靜態變量,用CLASS FUNCTION 返回屬性值。 (解決繼承問題)  好了,你現在需要的就把類引用過來吧。  (面向對象的解決方法)  當然也有其它辦法
      

  7.   

    一个工程里有多个子工程,每个工程又有许多公用的模块,比如log,DB之类,需要的常量、类型,变量,通用函数一大堆,写在一个define里,真是受不了,我希望一个define能控制在200行以内,delphi里的include 是可以分拆,但是类似于template,这意味着,type也要分拆,var也要分拆,工作量大,而且麻烦的是,又不能传递,尤其是type,不传递的话,每次用都要重新type,这可不是好地解决办法
      

  8.   

    按不同的使用层级分拆呗,然后需要哪个uses哪个。vcl那么复杂的framework不也那么拆成了许多块,一个空窗体还至少给生成8个单元呢,虽然实际上只要引用Forms单元就够了
      

  9.   

    父单元中用到了某些东西,子单元中用到,又必须uses,我不觉得这是个好的方法,${include}的方式似乎有一些帮助,但是和代码本身差别太大,也无法解决通用性的问题,uses log, db, auth, ....uses log, db, form, ...这样的方式简洁明了,可惜无法实现目录化的事情已经做了,但是那只对于工程配置有帮助,对于代码阅读,实在没什么用出貌似delphi只能这样了,我按照无满意贴结贴算了