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里头了;

  • 相关阅读:
    C# 16进制与字符串、字节数组之间的转换
    多文件上传方法
    超链接如何下载文件txt,word,excel等等
    asp.net不同类型文件读取处理
    .net二进制图片存储与读取的常见方法
    c#事务
    C#中的null和数据库中的null的区别
    Asp.net中Response.Charset 与Response.ContentEncoding区别
    导出到word
    js导出word
  • 原文地址:https://www.cnblogs.com/strinkbug/p/513346.html
Copyright © 2011-2022 走看看