呵呵,大概是这个样子的吧!var
  uRect : PRect;
begin
  ......  uRect :=  PRect( PByte(Buff) + SizeOf(RGNDATAHEADER) + (x * SizeOf(Rect)) )  ......end;

解决方案 »

  1.   

    大侠,编译提示类型不匹配,PByte返回应该是一指针吧,那后面的返回的值是字节数,能相加吗?
      

  2.   

    Delphi中好像没有PRect ,所以最好是定义一个PRect
    type 
     PRect=^Rect
      

  3.   

    是有PRect类型  PRect = Types.PRect;
      TRect = Types.TRect;
      

  4.   

    我自己是这么理解的,不知有没有错,编译倒是没错var
      uRect : PRect;
    begin
      ……
      uRect := Pointer(Buff);
      Inc(PByte(urect), SizeOf(RGNDATAHEADER) + (x * SizeOf(TRect)));
      ……
    end;请大侠指教,谢谢!!
      

  5.   

    呵呵,这样改吧uRect :=  PRect(LongWord(PByte(Buff)) + SizeOf(RGNDATAHEADER) + (x * SizeOf(Rect)) )
      

  6.   

    to  restar(lazybug):呵呵,你的改法不对,对指针做Inc时,是按类型加的,也就是说,Inc(p)就会使P加上P所指对象类型的长度,不知道我说清楚没有,好像有点坳口.不过事实就是这样子,你可以试试的.
      

  7.   

    呵呵,其实这样就行了,指针就是个32位无符号整位,与之可以互换使用的.
    uRect :=  PRect(LongWord(Buff) + SizeOf(RGNDATAHEADER) + (x * SizeOf(Rect)) )
      

  8.   

    呵呵,可能buf中的数据结构是:1. RGNDATAHEADER
    2. array of Rect即第一个字段是个RGNDATAHEADER型,后面是个Rect数组,那段C代码是要取出第X个Rect出来.
      

  9.   

    呵呵,当然,X是从0开始计的,就是说,X=0时取出第1个Rect,x=1时取出第2个Rect等等
      

  10.   

    To weizhi(行者)谢谢你的支持!
    你的理解应该是更接近原来的意思。
    只是不明白的是PRect为什么指向的是一数据缓冲长度,而不是该缓冲?
      

  11.   

    Sorry,我忘了说buff里面的内容buff存的是一区域的数据内容,GetRegionData获得的
      

  12.   

    呵呵,它不是指向了长度呀,它是指向了第X个Rect的地址, uRect^就是这个第X个Rect的内容了呀!!它算长度只是为了得到第X个Rect的首地址.呵呵,当然,X是从0开始计的,就是说,X=0时取出第1个Rect,x=1时取出第2个Rect等等