• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

delphi给字符指针分配内存

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

今天,对接第三方dll的时候出现如下问题:

接口声明如下:

long BL_tradeBalance (char *MerchantNumber,char *PosId,char *OperatorNumber,

                                    int TypeCode,int PrintMode,

char *ResponseBuf,char *retCode,char *retMsg)

输入参数

   char mMerchantNumber[6]        //商户号(门店号)

   char mPosId[3]                 //pos机号(终端号)

   char mOperatorNumber[20];       //操作员号

   int TypeCode;                               //业态标识  1

   int PrintMode;                  //打印模式  1

输出参数

   char ResponseBuf[2048]        //f返回当日对账明细

   char retCode [20]               //返回码

   char retMsg [256]              //返回信息

 ----------------------------------------------------------------------------------------

delphi端调用

  var

     resBuf,retCode,retMsg: PChar;

   调用:

     dev.BL_tradeBalance(Pchar(sStoreNo),PChar(FPosNo),PChar(FEmpCode),1,1,resBuf,retCode,retMsg)

   报dll异常

  此时需要我们给返回的指针主动分配内存

   resBuf := StrAlloc(2048);
   retCode := StrAlloc(20);
   retMsg := StrAlloc(256);

如果不是对接方主动说明,一般需要我们主动给返回值分配内存,然后做好释放工作

--------------------------------------------------------------------------------

   resBuf := StrAlloc(2048);
   retCode := StrAlloc(20);
   retMsg := StrAlloc(256);
   try

      ....

   finally 

       StrDispose(resBuf);
       StrDispose(retCode);
       StrDispose(retMsg);

   end;

--------------------------------------------------------------------------------

扩展了解下字符指针内存分配函数

  

GetMem
AllocMem
ReallocMem
FreeMem

GetMemory
ReallocMemory
FreeMemory

New
Dispose

NewStr
DisposeStr

StrNew
StrAlloc
StrDispose

给字符指针(PChar、PWideChar、PAnsiChar)分配内存, 最佳选择是: StrAlloc.

StrAlloc 虽然最终也是调用了 GetMem, 但 StrAlloc 会在指针前面添加 Delphi 需要的 4 个管理字节(记录长度).

StrAlloc 分配的内存, 用 StrDispose 释放, 用 StrBufSize 获取大小.

用 FreeMem 释放可以吗? 这样会少释放 4 个字节.

这种类型的指针一般用于 API 函数的参数, 譬如获取窗口标题:

var
  p: PChar;
begin
  p := StrAlloc(256);
  GetWindowText(Handle, p, StrBufSize(p));
  ShowMessage(p); {Form1}
  StrDispose(p);
end;

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap