c++代码转delphi代码

求助:c++代码转delphi代码
将一段c++代码转成delphi代码
共有3个方法
C/C++ code

int TcpByteSendRec(int iport,DWORD dwip, char *strDataOut,LPCTSTR strDataIn)
{
    //准备发送的byte数据
    char pstrOut[256];
    memset(pstrOut,0,sizeof(pstrOut));
    pstrOut[0]=0;
    pstrOut[1]=strlen(strDataIn);
    Gb2312ToUtf8(&(pstrOut[2]), 254, strDataIn, strlen(strDataIn));
    //定义数据存放返回数据
    char rebuff[256];
    memset(rebuff,0,sizeof(rebuff));
    //调用发送函数发送
    int result=ReITCPSenByteDataReWD(iport,dwip,pstrOut,rebuff);  // 这个是调用dll 不用翻译 
    if (result!=0)
    {
        return result;
    }
    //对接收到的数据rebuff进行解析//得到解析后数据
    int rebuffLen=rebuff[1];
    Utf8ToGb2312(strDataOut,rebuffLen+1,&rebuff[2],rebuffLen+1);
    return 0;
}




void Gb2312ToUtf8(char* pstrOut, u32 dwOutLen, const char* pstrIn, u32 dwInLen) 
{ 

    int i = MultiByteToWideChar(CP_ACP, 0, pstrIn, -1, NULL, 0); 
    wchar_t * strSrc = new wchar_t[i+1]; 
    MultiByteToWideChar(CP_ACP, 0, pstrIn, -1, strSrc, i); 
    
    i = WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, NULL, 0, NULL, NULL); 
    if (i >= dwOutLen) 
    { 
        i = dwOutLen - 1; 
    } 
    WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, pstrOut, i, NULL, NULL); 
    delete strSrc; 
} 





void Utf8ToGb2312(char* pstrOut, u32 dwOutLen, const char* pstrIn, u32 dwInLen) 
{ 
    if (NULL == pstrOut) 
    { 
        return ; 
    } 

    int i = MultiByteToWideChar(CP_UTF8, 0, pstrIn, -1, NULL, 0); 
    wchar_t * strSrc = new wchar_t[i+1]; 
    MultiByteToWideChar(CP_UTF8, 0, pstrIn, -1, strSrc, i); 
    
    i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL); 
    if (i >= dwOutLen) 
    { 
        i = dwOutLen - 1; 
    } 
    WideCharToMultiByte(CP_ACP, 0, strSrc, -1, pstrOut, i, NULL, NULL); 
    delete strSrc; 
}




谢谢

------解决方案--------------------
UTF8Decode可以直接转到UTF-8
------解决方案--------------------
char* -> PChar
WideCharToMultiByte这个都是一样的
------解决方案--------------------
指针用之前分配内存,c中char*对应delphi的AnsiChar

Delphi(Pascal) code

procedure Gb2312ToUtf8(pstrOut: PAnsiChar; dwOutLen: Integer; const pstrIn: PAnsiChar; dwInLen: Integer);
var i: Integer;
  strSrc: PWideChar;
begin
  i := MultiByteToWideChar(CP_ACP, 0, pstrIn, -1, nil, 0);
  GetMem(strSrc, i * SizeOf(WideChar));
  try
    MultiByteToWideChar(CP_ACP, 0, pstrIn, -1, strSrc, i);
    i := WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, nil, 0, nil, nil);
    if (i >= dwOutLen) then
    begin
      i := dwOutLen - 1;
    end;
    WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, pstrOut, i, nil, nil);
  finally
    FreeMem(strSrc, i * SizeOf(WideChar));
  end;
end;

procedure TForm1.btn2Click(Sender: TObject);
var sengdata: PAnsiChar;
  pstrOut: array[0..256] of AnsiChar;
  PpstrOut: PAnsiChar;
  rebuff: array[0..256] of AnsiChar;
  rebuffLen: Integer;
begin
  sengdata := '1,0019,20120309174702,B42AA8C5A0A29AA952937FA657625A90';
  FillChar(pstrOut, 256, 0);
  pstrOut[0] := '0';
  pstrOut[1] := AnsiChar(Length(sengdata));
  Gb2312ToUtf8(@pstrOut[2], 254, sengdata, strlen(sengdata));
  ShowMessage(pstrOut); //这里就错误   注释同样出现错误
end;