zoukankan      html  css  js  c++  java
  • package的创建安装和使用

    关于包,主要有一下几个问题:

    包的创建,包的安装,包的使用;

    1、包的创建:
      file->new->other->package,好,就这样,一个包的雏形就创建好了,现在你就可以往里头添加东西了,主要包括两个方面的东西,一个是requires 一个是contains,其中:
       #requires:用来指定这个包需要使用到的一些外部包的名字;
       #contains:指定这个包需要包含的unit的名字;
    2、包的安装:
      在编辑好包的requires和contains的条目之后,先点击compile,再点击install按钮,ok,你已经在ide中安装了一个你自己的包;
    3、包的使用:
      参考下面的  代码3

    需要注意的地方:
       a.一个包不能出现另外一个包的contains里头;
       b.在编译的时候,被包含在contains里头的单元,以及被这些包含在contains里头的单元uses的单元都会被编译进这个包里头;当然了,这里指的是用户自定义的单元;
       c.如果有多个package将要被同一个应用application(包括delphi ide)使用,那么些package里头不应该有相同的unit,无论他们是被直接的还是间接的(所谓的间接就是b中的那种情况)被包含进去的;这就是说,如果你的创建一个package,这个contains了一个vcl里头的unit,那么你就不能将这个package安装到ide里头去。那么如果你一定要用到一个已经被打包的unit的话,你可以将这个unit所在的package加入到requires中去;
    下面是一个例子:

    我们新建一个包,这个包的代码如下:

    代码1

    package IAmTestingPackage;

    {$R *.res}
    {$ALIGN 8}
    {$ASSERTIONS ON}
    {$BOOLEVAL OFF}
    {$DEBUGINFO ON}
    {$EXTENDEDSYNTAX ON}
    {$IMPORTEDDATA ON}
    {$IOCHECKS ON}
    {$LOCALSYMBOLS ON}
    {$LONGSTRINGS ON}
    {$OPENSTRINGS ON}
    {$OPTIMIZATION ON}
    {$OVERFLOWCHECKS OFF}
    {$RANGECHECKS OFF}
    {$REFERENCEINFO ON}
    {$SAFEDIVIDE OFF}
    {$STACKFRAMES OFF}
    {$TYPEDADDRESS OFF}
    {$VARSTRINGCHECKS ON}
    {$WRITEABLECONST OFF}
    {$MINENUMSIZE 1}
    {$IMAGEBASE $40000000}
    {$IMPLICITBUILD OFF}

    requires
      rtl,
      vcl;

    contains
      ForTestPackage in 'ForTestPackage.PAS';

    end.

    我们看到包里头contains了一个叫做ForTestPackage 的单元;

    代码2:

    unit ForTestPackage;

    interface

    uses
      SysUtils,Dialogs,ForTestUses;

    type
      TForTestPackage = class(TObject)
      public
        procedure show;
      end;
      

    implementation

    {
    ******************************* TForTestPackage ********************************
    }
    procedure TForTestPackage.show;
    begin
      showmessage('i am in the package,i am contains directly');
    end;


    end.

    上面的代码的uses语句中包含了ForTestUses单元;

    代码3:
    unit ForTestUses;

    interface

    uses
      SysUtils,Dialogs;

    type
      TForTestUses = class(TObject)
      public
        procedure Show;
      end;
      

    implementation

    {
    ********************************* TForTestUses *********************************
    }
    procedure TForTestUses.Show;
    begin
      showmessage('in am contained indirectly');
    end;


    end.


    然后我们对package进行编译并安装,发现虽然ForTestUses没有明确的出现在package的contains里头,但是它也一样的被编译进了package;下面我们通过一个小程序来验证一下;
    程序的代码如下:

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,FortestPackage,Fortestuses;

    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
      ForTestUses:TForTestUses;
      ForTestpackage:TForTestPackage;
    begin
      ForTestUses:=TForTestUses.Create;
      ForTestUses.Show;
      ForTestUses.Free;
      fortestpackage:=TForTestpackage.Create;
      ForTestpackage.show;
      Fortestpackage.Free;
    end;

    end.


    如果ForTestUses没有被编译进package里头,那么在unit1的uses语句中添加ForTestUses应该是会出错的,可是现在没有,说明它确实是被添加到IAmTestingPackage这个package里头了;

  • 相关阅读:
    友盟上报 IOS
    UTF8编码
    Hill加密算法
    Base64编码
    Logistic Regression 算法向量化实现及心得
    152. Maximum Product Subarray(中等, 神奇的 swap)
    216. Combination Sum III(medium, backtrack, 本类问题做的最快的一次)
    77. Combinations(medium, backtrack, 重要, 弄了1小时)
    47. Permutations II(medium, backtrack, 重要, 条件较难思考)
    3.5 find() 判断是否存在某元素
  • 原文地址:https://www.cnblogs.com/strinkbug/p/513346.html
Copyright © 2011-2022 走看看