type
ItemTemp=packed record
  sName:string;
  dBase,dId,dCallAddr:Cardinal;
  wCount:Word;
  bSite:Byte;
end;
PItemTemp=^ItemTemp;Procedure tmpGoods(ID,i:Cardinal);stdcall;
var
  tmpitem:PItemTemp;
begin
Form5.mmo1.Lines.Add(IntToStr(id)+','+IntToStr(i));//正确显示
  tmpitem.dBase:=My.dBase;//出错
  tmpitem.dId:=ID;   //出错
  tmpitem.bSite:=1;   //出错
end;我用delphi调试的时候在temitem.dbase显示
temitem   nil打开后里面所有的 都显示Inaccessible value

解决方案 »

  1.   

    var
      tmpitem:ItemTemp;
      

  2.   

    tmpitem没有分配内存
    New(tmpitem);
      

  3.   

    type
      ItemTemp=packed record
        sName:string;
        dBase,dId,dCallAddr:Cardinal;
        wCount:Word;
        bSite:Byte;
      end;
      PItemTemp=^ItemTemp;Procedure tmpGoods(ID,i:Cardinal);stdcall;
    var
      FTmpItem1: TItemTemp;  //结构体
      FTmpItem2: PItemTemp;  //结构体指针
    begin
      Form5.mmo1.Lines.Add(IntToStr(id)+','+IntToStr(i));//正确显示
      //结构体赋值
      FTmpItem1.dBase := My.dBase; 
      FTmpItem1.dId   := ID; 
      FTmpItem1.bSite := 1;
      //结构体指针赋值
      New(FTmpItem2);
      FTmpItem2^.dBase := My.dBase;
      FTmpItem2^.dId   := ID;
      FTmpItem2^.bSite := 1;
      ……
      Dispose(FTmpItem2);  //这句很重要,否则会产生内存泄漏
    end;
      

  4.   

    哈哈,是没有分配内存给指针,,用new