procedure TForm7.Button7Click(Sender: TObject);
var
hthread:thandle;
threadid:dword;
begin
hthread:=createthread(nil,0,@rasdial1,nil,0,threadid);
end;
其中rasdial1为一个函数。编译时报错第4个参数不能为空。
谁能帮我解释createthread函数。

解决方案 »

  1.   

    改为hthread:=createthread(nil,0,@rasdial1,nil,0,@threadid);
      

  2.   

    The CreateThread function creates a thread to execute within the address space of the calling process. HANDLE CreateThread(    LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes  
        DWORD dwStackSize, // initial thread stack size, in bytes 
        LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function 
        LPVOID lpParameter, // argument for new thread 
        DWORD dwCreationFlags, // creation flags 
        LPDWORD lpThreadId  // pointer to returned thread identifier 
       );用0代替nil
      

  3.   

    对了,第四个参数你必须给定一个指针,为了将某个参数传递到线程函数(rasdiall)中。
    线程函数function rasdiall(Parameter: Pointer): Integer; stdcall;其中第四个参数要传递到Parameter。
      

  4.   

    还是第四个参数出现variable required.错误
      

  5.   

    这么写
    procedure TForm7.Button7Click(Sender: TObject);
    var
    hthread:thandle;
    threadid:dword;
    Param: Integer;
    begin
    hthread:=createthread(nil,0,@rasdial1,@Param,0,@threadid);
    end;
      

  6.   

    我又试了一下,这么写是对的:
    procedure TForm7.Button7Click(Sender: TObject);
    var
    hthread:thandle;
    threadid:dword;
    Param: ^Integer;
    begin
    hthread:=createthread(nil,0,@rasdial1,Param,0,threadid);
    end;
      

  7.   

    线程:function rasdial1(p:pointer):longint;stdcall;
      

  8.   

    hthread:=createthread(nil,0,@rasdial1,nil//在线程函数没有参数的情况下,这里是可以为空指针的,0,threadid);
      

  9.   


    var
    hthread:thandle;
    threadid:dword;
    放在外部声明看看,也就是全局声明
      

  10.   

    hthread:=createthread(nil,0,@rasdial1,//在这里写上你的要传入线程函数的参数的地址,0,threadid);
      

  11.   

    建议使用delphi的线程类
    //////
      type TCpa=RECORD
         Cb_p,Cb_n:TComboBox;
      end;//////function Faddress(var cpa:TCpa):dword;stdcall;
    begin
       try
          address.Filter:='';
          address.Filtered:=false;
          address.First;
          if cpa.cb_p=cpa.cb_n then begin
             cpa.Cb_p.Items.Clear;
             while not address.Eof do begin
                cpa.cb_p.Items.Add(address.FieldByname('c'+copy(cpa.Cb_p.Name,2,length(cpa.Cb_p.Name))).AsString);
                address.Next;
             end;
          end
          else begin
             cpa.cb_n.Items.Clear;
             address.Filter:='c'+copy(cpa.Cb_p.Name,2,length(cpa.Cb_p.Name))+'='''+cpa.Cb_p.Text+'''';
             address.Filtered:=true;
             while not address.Eof do begin
                cpa.cb_n.Items.Add(address.FieldByname('c'+copy(cpa.Cb_n.Name,2,length(cpa.Cb_n.Name))).AsString);
                address.Next;
             end;
          end;
       except
       end;
       result:=0;
    end;