tagTheadClient = record     //强制下机使用的结构
    pCardID:Pchar;
    pComputerIP:   Pchar;    //要强制机器的IP
    AConn:         TADOConnection;
  end;
  TTheadMsg = tagTheadClient;
  PTheadMsg = ^tagTheadClient;
.....
tMsg.pComputerIP:=Pchar(ComName);
tMsg.AConn:=ConnectADO;
tMsg.pCardID:=Pchar(RefView.Items.Item[i].Caption);
tTHandle:=createthread(nil,0,@ForceDownNet,tMsg,0,tDword);线程的实现函数是这样的:
procedure ForceDownNet(pMsg:TTheadMsg);
var
  ItemList:TListItem;
  ReFlag:Integer;
  SQL:String;
  //GetMsg:TTheadMsg;
begin
  //GetMsg:=pMsg;
  ReFlag:=DownPCIP(pMsg.pComputerIP);
end;可是我再线程中设置断点的时候总是提示说pMsg.pComputerIP为空。这是为什么呢???

解决方案 »

  1.   

    PChar 是指针,,你确定你给他分配了足够的内存????????
      

  2.   

    哦。。刚才没看清楚,,不是PCHAR的问题既然你发现 DownPCIP(pMsg.pComputerIP);的时候pMsg这个记录中的数据有问题。那么就看看在这个记录被串过来之前被正确的填写过就知道了。
    DownPCIP(pMsg.pComputerIP);的参数来自ForceDownNet(pMsg:TTheadMsg);,什么地方调用的
    ForceDownNet(pMsg:TTheadMsg);呢?一级一级的向上看去就找到了。
    不过我不知道你的本意是要传值 还是要传指针。
      

  3.   

    没有贴全,是这样的:
    tagTheadClient = record     //强制下机使用的结构
        pCardID:Pchar;
        pComputerIP:   Pchar;    //要强制机器的IP
        AConn:         TADOConnection;
      end;
      TTheadMsg = tagTheadClient;
      PTheadMsg = ^tagTheadClient;
    .....
    tMsg:TTheadMsg;
    tMsg.pComputerIP:=Pchar(ComName);
    tMsg.AConn:=ConnectADO;
    tMsg.pCardID:=Pchar(RefView.Items.Item[i].Caption);
    tTHandle:=createthread(nil,0,@ForceDownNet,tMsg,0,tDword);线程的实现函数是这样的:
    procedure ForceDownNet(pMsg:TTheadMsg);
    var
      ItemList:TListItem;
      ReFlag:Integer;
      SQL:String;
      //GetMsg:TTheadMsg;
    begin
      //GetMsg:=pMsg;
      ReFlag:=DownPCIP(pMsg.pComputerIP);
    end;可是我再线程中设置断点的时候总是提示说pMsg.pComputerIP为空。这是为什么呢???