最近开发一个应用程序,遇到这样一个问题:程序由一个dll和一个主程序组成,dll中和主程序中都用到了很多相同的参数类型,于是将公用的参数类型单独编写了一个Unit,比如叫DataTypes.pas。但是,在dll工程中和主程序工程中uses这个单元的时候,需要DataTypes.pas单元知道,现在是被谁引用,从而能够在编译的时候稍微有所不同。我现在一直使用{$IFDEF xxDll}来实现,这样非常不方便,每次切换编写dll和主程序的时候,就要在DataTypes.pas单元头上写上或是删除{$DEFINE xxDll},因为{$DEFINE}只对当前.pas起作用。
有没有一种方法,使得在当前工程中的某一个文件中{$DEFINE}一个什么东西,而使当前工程中的起他文件中的{$IFDEF}也受到影响?

解决方案 »

  1.   

    直接用条件编译指令是不行的。
    可以在公用的参数类型所在Unit中设置一个变量(如CallerIsDll: Boolean)。Application或者dll使用时,给它设置不同的值。
    可以将CallerIsDll定义为全局变量,这样可以直接设置值;也可以设置为局部变量,然后让它所在Unit公开一个过程,通过调用该过程给CallerIsDll设置值。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————