給字符指針(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 做個記憶標簽)