我在用 Delphi+DirectDraw 编程时遇到了一个这样的问题:
   C++语言的代码为:
   DDSURFACEDESC2 ddsd;
   ......
   int mempitch = ddsd.lPitch;
   UCHAR * video_buffer = ddsd.lpSurface;
   // plot 1000 random pixels with random colors on the primary surface, 
   // they will be instantly visible
   for (int index=0; index<1000; index++)
     {
       UCHAR color = rand() % 256;
       int x = rand() % 640;
       int y = rand() % 480;
       // plot the pixel
       video_buffer[x+y*mempitch] = color;<<<<----------问题所在处???
     } // end for index
   其中lpSurface是一个指针,怎样才能把标记出来的部分变为Pascal语言呢?
delphi中的指针不象C,C++中那样灵活,碰到问题真难解决!!!

解决方案 »

  1.   

    video_buffer[x+y*mempitch] = color
    可以转换为
     PByte(Integer(video_buffer)+x+y*mempitch])^ := color;
      

  2.   

    video_buffer[x+y*mempitch] = color
    可以转换为
     PByte(Integer(video_buffer)+x+y*mempitch))^ := color;
      

  3.   

    可能是我没说清楚;DDSURFACEDESC2是一个结构体,lpSurface是它的一个域,C++中它是一个void类型的指针,在pascal的DirectDraw.pas中被转换为Pointer,它被强制转换为Integer类型是不对的。
      

  4.   

    madyak的代码可以啦,转换为Integer只是为了指针运算,要不你改成我这样也行。PByte(PChar(video_buffer)+x+y*mempitch))^ := color;
      

  5.   

    证明Delphi比C++好呀,都转到Delphi上吧!