m_outputBuffers定义为:
char** m_outputBuffers;请问这一句得如何才翻译成Pascal:?
m_outputBuffers = (char**) malloc(sizeof(char*) * 2);
for ( i = 0; i < N_BUFFERS; i++ )
m_outputBuffers[i] = (char*) malloc(sizeof(char) * 2);
非常感谢!!

解决方案 »

  1.   

    ppChar = ^PChar;
    var
      poutPutbuff :ppChar;
    ...
    poutPutbuff := setlength(2);
    for i :=0 to N_BUFFERS - 1 do
    begin
      poutPutbuff[1] = sellegth(2)
      Inc(i);
    end;
      

  2.   

    采用动态数组方法:
    在窗体中添加一个 Memo 组件.  一个 Button 组件.
    Button 组件的 OnClick 事件如下:procedure TForm1.Button1Click(Sender: TObject);
    var
      m_outputBuffers: Array of PChar;      //定义数组
      i: Integer;
    const
      N_BUFFERS = 10;
    begin
      SetLength(m_outputBuffers, N_BUFFERS);//分配空间  Self.Memo1.Lines.Clear;
      for i := 0 to N_BUFFERS - 1 do        //分配空间并赋值
      begin
                                            //为 PChar 变量分配空间
          m_outputBuffers[i] := PChar(GlobalAllocPtr(GMEM_MOVEABLE or GMEM_SHARE,
                                    SizeOf(Char) * 2));                                        //赋值. 注意, 要用 StrCopy 方法.
          StrCopy(m_outputBuffers[i], PChar(IntToStr(i)));
          Self.Memo1.Lines.Add(m_outputBuffers[i] + ':' + IntToStr(DWORD(m_outputBuffers[i])));
      end;  for i := 0 to N_BUFFERS - 1 do
      begin
          Self.Memo1.Lines.Add(Format('%s', [m_outputBuffers[i]]) + ':' + IntToStr(DWORD(m_outputBuffers[i])));
      end;  for i := 0 to N_BUFFERS - 1 do
      begin                                 //释放 PChar 空间
          GloBalFreePtr(m_outputBuffers[i]);
      end;                                  //释放数组空间
      SetLength(m_outputBuffers, 0);
    end;实际应用就自己去摸索吧
      

  3.   

    不过我的SetLength用错了,不是返回值,对不起 :)
      

  4.   

    再给你一段代码吧:Delphi 的双指针操作. 对你有帮助注: C 语言的 char ** 就相当于 Delphi 的 PPChar;
    procedure TForm1.Button3Click(Sender: TObject);
    var
      m_outputBuffers: PPChar;
      i: Integer;
    const
      N_BUFFERS  = 10;
      StringLeng = 255;
    begin
      m_outputBuffers := PPChar(GlobalAllocPtr(GMEM_MOVEABLE or GMEM_SHARE,
                         SizeOf(PChar) * N_BUFFERS));  for i := 0 to N_BUFFERS - 1 do
      begin
          m_outputBuffers^ := PChar(GlobalAllocPtr(GMEM_MOVEABLE or GMEM_SHARE,
                                    SizeOf(Char) * StringLeng));
          StrCopy(m_outputBuffers^, PChar(IntToStr(i)));
          Inc(m_outputBuffers);
      end;
      //返回 m_outputBuffers^指向的第一个字符
      DEc(m_outputBuffers ,N_BUFFERS);  //返回十个字符串
      for i := 0 to N_BUFFERS - 1 do
      begin
          Self.Memo1.Lines.Add(m_outputBuffers^ + ':' + IntToStr(DWORD(m_outputBuffers^)));
          INC(m_outputBuffers);
      end;  DEc(m_outputBuffers, N_BUFFERS);
      for i := 0 to N_BUFFERS - 1 do
      begin
          GloBalFreePtr(m_outputBuffers^);          //释放内存
          INC(m_outputBuffers);
      end;
      DEc(m_outputBuffers, N_BUFFERS);
      GloBalFreePtr(m_outputBuffers);               //释放内存
    end;
      

  5.   

    to:  cmain83(龙行天下2008)
     Delphi直接有PPChar类型吗?
      

  6.   

    const N_BUFFERS=100;
    var p,m_outputBuffers:ppchar;
        i:integer;////
       getmem(m_outputBuffers,N_BUFFERS*sizeof(pchar)) ;
       p:=m_outputBuffers;
       for  i:=0  to  N_BUFFERS-1 do
       begin
          p^ := StrAlloc(sizeof(char) * 2);
          inc(p);
       end;
      

  7.   

    const N_BUFFERS=100;
    type PPcharArray=^TPcharArray  ;
        TPcharArray=array[0..0] of pchar;
    var m_outputBuffers:PPcharArray;
        i:integer;begin
       getmem(m_outputBuffers,N_BUFFERS*sizeof(pchar)) ;
       for  i:=0  to  N_BUFFERS-1 do
             m_outputBuffers[i]:= StrAlloc(sizeof(char) * 2);
    end;
      

  8.   

    有 PPChar 类型在 System.pas 文件中可以找到...
      

  9.   

    你理解一下指针的含义就比较好处理这类问题了
    其实一个数组变量就是一个指针,一维数组就是一维指针,二为数组就是二维指针
    如:
    Int1d: array[0..10] of Integer;
    pInt: ^Integer;
    SetLength(pInt, 10);Int1d:array[0..10][0..10] of Integer;
    type
      pInt = ^Integer;
      ppInt:array[0..10] of pInt;
      for i := 0 to 10 do
        setlength(ppInt[i], 11);
    或者
      ppInt = ^pInt;
         
      int2d: ppInt;
      setlength(int2d, 11);
      for I := 0 to 10 do
        setLength(int2d[i], 11);
      

  10.   

    回复人: ColdWolf(天边流星) ( ) 信誉:100 
    to:  cmain83(龙行天下2008)
     Delphi直接有PPChar类型吗?
    回复人: zjqyb(风清扬*任它溺水三千,我只取一瓢饮*) ( ) 信誉:100  2003-9-30 9:58:46  得分:0 
      
    有  
    回复人: cmain83(龙行天下2008)  有 PPChar 类型在 System.pas 文件中可以找到...-------------------------------------------------
    这不是睁眼说瞎话么?我的D5里面就没有拜托确定一下版本好不好?否则给人误解~~~