给字符指针(PChar、PWideChar、PAnsiChar)分配内存, 最佳选择是: StrAlloc.
StrAlloc 虽然最终也是调用了 GetMem, 但 StrAlloc 会在指针前面添加 Delphi 需要的 4 个管理字节(记录长度).
StrAlloc 分配的内存, 用 StrDispose 释放, 用 StrBufSize 获取大小.
用 FreeMem 释放可以吗? 这样会少释放 4 个字节.
dll:
int GetCardInfo(int index, char* value)
Delphi的调用方式:
procedure TForm1.Button_readClick(Sender: TObject);
var
ret:Integer;
info:Pchar;
card_lb:String;
begin
Authenticate();
Read_Content(1);
info := StrAlloc(1000); // 这一步 给字符指针分配内存很重要,后面不要忘了用 StrDispose(info)来释放内存。开始用info:=’123456‘赋值的方式都要报错
ret := GetCardInfo(105, info);
card_lb := '外国人居住证';
case ret of
1: card_lb := '居民身份证';
2: card_lb := '居民身份证';
3: card_lb := '港澳台居住证';
end;
StrDispose(info);
//显示头像
GetBmpPhotoExt();
end;
=================================================================
PChar是一个指针, 它的大小只有32位. 定义时由Delphi自动填0. 要将PChar作为字符串
使用的话必须自己分配内存用完必须自己释放. PChar型字符串由#0表示字符串结尾
Delphi所提供的相关PChar字符串的操作都是判断#0来决定字符串的结尾的。
因为PChar是指针,所以它能指向任何地方(也就是说它不一定非要指向字符串不可).
把一个String赋值给PChar只是将String中保存具体字符串的内存的地址给PChar
变量. 当然也可以把Char数组第一个元素的地址给PChar.
pchar不是函数,而是数据类型。pchar是个指针类型,指向#0结尾的字符串,比如你看到如下代码:
var s:String;
begin
xxx(pchar(s));//把s强制转换为pchar(string本身也是指针)
//..
end;
以上摘自网络。
=========================================
(TryStrToInt 做个记忆标签)