Delphi 中定义PCMBufferkss可用:
Var
  PCMBuffer : PBYTE;
分配和释放可用.
GetMem(PCMBuffer,Size);
FreeMem(PCMBuffer);在BCB的
extern "C" __declspec(dllexport) int __stdcall GetTTSData(String TextStr,
            String IPStr, String FileName,PBYTE &PCMBuffer, int Speed)中定义的PCMBuffer参数就是一个普通的绶冲区指针,没什么特别的地方.
所以你在Delphi中只要定义一个PBYTE变量(它就是一个指针变量),然后为它分配内存即可.

解决方案 »

  1.   


    我现在要用delphi 写一个dll ;就是在dll分配内存出错;
    getdata(buf:pchar);
    beign
      getmem(buf,size);
    end;
    delmem(buf:pchar);
    begin
      freemem(buf);
    end;主程序中
     var
      p;pchar;getdata(p);
    delmem(p);
    好像无法成功
      

  2.   

    如何实现在dll 中分配内存 和释放
    ///////////dll 
    library PrjDll;
    uses
      windows,     SysUtils,  Classes;
    {$R *.RES}
    function file2char(var P:Pchar):integer; stdcall;export;
    var
      fm:Tfilestream;
    begin
      //MessageBox(0, PChar(IntToHex(Longint(p), 8)), '', MB_OK);
      fm:=Tfilestream.Create('1.txt',fmopenread);
      result := fm.size+1;
      getMem(p,fm.size+1);
      //MessageBox(0, PChar(IntToHex(Longint(p), 8)), '', MB_OK);
      fm.read(p,fm.size);
      fm.Free;
    end;
    procedure delmem(p:pchar);
    begin
      freemem(p);
    end;
    exports
      file2char,
      delmem;
    begin
    end.
    //测试程序 function file2char(var P:Pchar):integer; stdcall;external 'PrjDll.DLL';
     procedure delmem(p:pchar); stdcall;external 'PrjDll.DLL';
    var
      Form1: TForm1;implementation
    var
       p:pchar;
    {$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    var  isize:integer;
    begin
      //getmem(p,8); //如果分配的内存比实际需要的大没问题,小了就不行;
                      //我想知道dll中如何去改变内存大小;好像ReallocMem不行
      //p[0]:=#0;
    //  MessageBox(0, PChar(IntToHex(Longint(p), 8)), '', MB_OK);  isize:=file2char(p);
    //  MessageBox(0, PChar(IntToHex(Longint(p), 8)), '', MB_OK);  if isize>0 then
      begin
        richedit1.Clear;
        richedit1.Lines.add(p);
      end
      else richedit1.Lines.add('dfadfdas');
    // freemem(p,isize);
       delmem(p);
      p:=nil;end;end.