Delphi調用C++DLL,參數是char* 的方式


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM