unit NTServiceList;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
WinSvc;
type  PMyServices =^TMyServices;
  TMyServices = array[0..255] of TEnumServiceStatus;type
  TNTServiceList = class(TComponent)
  private
    { Private declarations }
    FServiceList : TStringlist;
    FServer : string;
    FSCManagerHandle : HWND;
    function Display_status(status_code:DWORD):string;
    function GetEnumPriv : boolean;
    function GetServer : string;
    function GetServiceList : tstringlist;
    procedure SetServer (value : string);
    procedure DoServiceList;  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;  published
    { Published declarations }
    property Server : string read GetServer write SetServer;
    property ServiceList : tstringlist read GetServiceList;  end;procedure Register;
const
SERVICE_WIN32_OWN_PROCESS = $00000010;
SERVICE_WIN32_SHARE_PROCESS = $00000020;
SERVICE_WIN32 = (SERVICE_WIN32_OWN_PROCESS or
         SERVICE_WIN32_SHARE_PROCESS);
SERVICE_ACTIVE = 1;
SERVICE_INACTIVE = 2;
SERVICE_STATE_ALL = SERVICE_ACTIVE + SERVICE_INACTIVE;
implementationconstructor TNTServiceList.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FServiceList := tstringlist.Create;
end;
让大家看了这么一大段,其实我的问题很简单,我在调用create方法生成NTServiceList这个类的实例时,create()方法中的AOwner: TComponent,我应该替换成什么呢?我不明白这个参数的含义.谢谢

解决方案 »

  1.   

    self或者nil,如果是self的话,不需要手动施放,如果是nil,你需要手动施放
      

  2.   

    如果我把create方法的参数设为self的话,假设我把这个方法写在Button1Click事件下,运行时就会报错"A component named button1 has existed",如果放在Button2Click事件下,就报"A component named button2 has existed"还有,我不明白楼上说的"如果是self的话,不需要手动施放,如果是nil,你需要手动施放"是什么意思?你说是把它做成控件的形式吗?但怎么生成,在哪个选项卡下可以看到?
      

  3.   

    那设置为nil好了。。手动释放的意思就是在完成功能后,对控件进行free操作。。如果你的参数是self的话,可以不单独对这个控件进行free操作。它会根据你的self所指的属主的释放而自动释放。给你个例子:var
      Opendialog:TOpendialog;
    begin
      Opendialog:=Topendialog.create(nil);  try
        if Opendialog.execute then
           {...}
      finally
        Opendialog.free;//这就是手动释放,如果你的Opendialg的Create参数为self,这里可以手动释放,也可以不手动释放,手动释放可以及时回收资源(就是程序的内存占用),手动释放未必都是free方法,需要看这个控件本身的析构方法。
      end;end;