在delphi 里按F9运行 当点击 button1 时就会出错,但是在外面直接运行 Project1.exe 点击 button1 就不会出错 ,哪位大哥帮我一下,
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls ;type
  TNetResourceArray = ^TNetResource;  //网络资源类型的数组
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Function GetServerList( var List : TStringList ) : Boolean;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  search = class(TThread)
  public
  memobuffer:TStringList;
  private
    { Private declarations }
  protected
    constructor create;//(createsuspended:boolean) ;
    procedure Execute; override;
    procedure Terminate;
  end;
var
  Form1: TForm1;implementation{$R *.dfm}constructor search.create;//(createsuspended:boolean);
 begin
   inherited create(false);//(createsuspended);
   FreeOnTerminate := true;
   memobuffer := TStringList.Create;
 end;
procedure search.Execute;
var i:integer;
begin
  { Place thread code here }
     showmessage(inttostr(i));     if form1.GetServerList(memobuffer) then
       for i:=0 to memobuffer.Count do
         begin
           form1.Memo1.Lines.Add(memobuffer.Strings[i]);
         end ;
end;procedure search.Terminate;
begin
  memobuffer.Free;
  inherited ;
end ;Function tform1.GetServerList( var List : TStringList ) : Boolean;
Var
  NetResource : TNetResource;
  Buf : Pointer;
  Count,BufSize,Res : DWORD;
  lphEnum : THandle;
  p:TNetResourceArray;
  i,j : SmallInt;
  NetworkTypeList : TList;
Begin
  Result := False;
  NetworkTypeList := TList.Create;
  List.Clear;
  Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
  RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
  //获取整个网络中的文件资源的句柄,lphEnum为返回名柄
  If Res <> NO_ERROR Then exit;
  //执行失败,退出
  //执行成功,开始获取整个网络中的网络类型信息
  Count := $FFFFFFFF;
  //不限资源数目
  BufSize := 8192;
  //缓冲区大小设置为8K
  GetMem(Buf, BufSize);
  //申请内存,用于获取工作组信息
  Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
  If ( Res = ERROR_NO_MORE_ITEMS )
  //资源列举完毕
  or (Res <> NO_ERROR )
  //执行失败
  Then Exit;
  P := TNetResourceArray(Buf);
  For I := 0 To Count - 1 Do
  //记录各个网络类型的信息
  Begin
    NetworkTypeList.Add(p);
    Inc(P);
  End;
  //WNetCloseEnum关闭一个列举句柄
  Res:= WNetCloseEnum(lphEnum);
  //关闭一次列举
  If Res <> NO_ERROR Then exit;
  For J := 0 To NetworkTypeList.Count-1 Do
  //列出各个网络类型中的所有工作组名称
  Begin
    //列出一个网络类型中的所有工作组名称
    NetResource := TNetResource(NetworkTypeList.Items[J]^);
    //网络类型信息
    //获取某个网络类型的文件资源的句柄,NetResource为网络类型信息,lphEnum为返回名柄
    Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
    RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
    If Res <> NO_ERROR Then break;
    //执行失败
    While true Do
    //列举一个网络类型的所有工作组的信息
    Begin
      Count := $FFFFFFFF;
      //不限资源数目
      BufSize := 8192;
      //缓冲区大小设置为8K
      GetMem(Buf, BufSize);
      //申请内存,用于获取工作组信息,获取一个网络类型的文件资源信息,
      Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
      If ( Res = ERROR_NO_MORE_ITEMS )
      //资源列举完毕
      or (Res <> NO_ERROR)
      //执行失败
      then break;
      P := TNetResourceArray(Buf);
      For I := 0 To Count - 1 Do
      //列举各个工作组的信息
      Begin
        List.Add( StrPAS( P^.lpRemoteName ));
        //取得一个工作组的名称
        Inc(P);
      End;
    End;
    Res := WNetCloseEnum(lphEnum);
    //关闭一次列举
    If Res <> NO_ERROR Then break;
    //执行失败
  End;
  Result := True;
  FreeMem(Buf);
  NetworkTypeList.Destroy;
End;procedure TForm1.Button1Click(Sender: TObject);
var searchPC : search;begin
   searchPC :=  search.create//(false);
end;end.