delphi 给字符指针分配内存
今天,对接第三方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;
转载于:https://www.cnblogs.com/lodor/p/6646875.html
- 点赞
- 收藏
- 分享
- 文章举报
- Delphi 的内存操作函数(1): 给字符指针分配内存
- Delphi 的内存操作函数(1): 给字符指针分配内存
- Delphi 给字符指针分配内存
- Delphi 的内存操作函数(1): 给字符指针分配内存
- Delphi 的内存操作函数(1): 给字符指针分配内存
- Delphi 的内存操作函数(1): 给字符指针分配内存( 给字符指针(PChar、PWideChar、PAnsiChar)分配内存最佳的选择是StrAlloc。分配内存的时候会对字符串进行初始化)
- Delphi 的内存操作函数(1): 给字符指针分配内存
- Delphi 字符指针分配内存
- delphi 给字符指针分配内存
- Delphi 的内存操作函数(1): 给字符指针分配内存
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 给字符指针(PChar、PWideChar、PAnsiChar)分配内存, 最佳选择是: StrAlloc.
- 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- Delphi 的内存操作函数(3): 给结构体指针分配内存
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- Delphi 的内存操作函数(2): 给数组指针分配内存