小弟是学C#的,最近有项目需要用到delphi,下面这个方法是照别人写的改了下,由于对delphi不熟悉,还请各位大侠帮忙了,
问题1:sTM在数据库里是BINARY(8)类型的字段,下面代码里我怎么把sTM赋给pTM呢?
问题2:怎么把pointer(pDAC)转换成string 返回呢function GetCashCardBalanceDAC(sTM:PChar;cYE:Currency):string; stdcall;
var
  pTM, pDAC: PChar;
  mBalance: Currency;
  iBalance: Integer;
begin
   mBalance := 0;
   iBalance := 0;
   GetMem(pTM, 8);
   FillChar(pTM^, 8, $0);
   GetMem(pDAC, 8);
   FillChar(pDAC^, 8, $0);
   mBalance := cYE;
   pTM:=sTM; --问题1
   DesEncrypt(PChar(DesKey_DAC), pTM, 1);
   iBalance := round(mBalance * 100);
   Move(iBalance, pDAC^, 4);
   DesEncrypt(pTM, pDAC, 1);
  result:= String(Char(pointer(pDAC)^)) ; --问题2    FreeMem(pTM);
    FreeMem(pDAC);
end;

解决方案 »

  1.   

    问题1:sTM在数据库里是BINARY(8)类型的字段,下面代码里我怎么把sTM赋给pTM呢?
    ZeroMemory(pTM, sizeof(pTM)); // 清空内存
    CopyMemory(pTM, sTM, sizeof(sTM));// 把sTM的内存拷贝到pTM
    问题2:怎么把pointer(pDAC)转换成string 返回呢
    同样无非也是内存拷贝,不过string类型的字符内容索引是从1开始,0处保存的是字符串的长度信息
    .......
    SetLenght(result, sizeof(pDAC));// 给字符串指定长度
    CopyMemory(pDAC, @result[1], sizeof(pDAC));//内存拷贝需要注意的是,pchar是指向char的指针,是以0为终止符的字符串类型,你也许要确认下该pchar的最后一个字节是0