1. 程式人生 > 其它 >Delphi string 字串如何傳遞給 C++ string

Delphi string 字串如何傳遞給 C++ string

技術標籤:DelphiVC

在 Delphi 中使用 C++ 類一直是個問題。
受劉麻子大哥的啟發,有了這個問題。
在此鄭重感謝劉麻子哥。

Delphi 中 string 是一段記憶體塊。
C++ 中 string 是一個標準 C++ 類。

既然是類,那就有大小。C++ string 類大小:24位元組(VS2019 中測試獲取到)。
那麼我們可以在 Delphi 中定義一個24位元組的記憶體區,然後將資料填充到這個24位元組的記憶體區中,傳遞給 C++,應該就可以了。
C++ 中的 string 類的記憶體結構:

type
  { C++ String 類記憶體結構 大小:24位元組 }
  VCString = record
    strMem: PDWORD;    // 字串指標
    R1, R2, R3: DWORD; // 未知
    len: DWORD;        // 字串長度
    R4: DWORD;         // 定值 = $0000002F
  end;

Delphi string ---> C++ string 的轉換函式:

{ Delphi String 轉換為 C++ String }
function DelphiString2VCString(strFileName: string): VCString;
var
  vcs: AnsiString;
begin
  vcs := AnsiString(strFileName);         // 寬位元組轉換為短位元組
  FillChar(Result, SizeOf(VCString), #0); // 置空
  Result.strMem := @vcs[1];               // 字串指標
  Result.len    := Length(vcs);           // 字串長度
  Result.R4     := $0000002F;             // 定值
end;


測試環境:Windows10+ VS2019 + DelphiXE2:
Debug 下,測試通過。
Release 下,退出時會報異常。開啟編譯選項:,就可以通過了。
測試原始碼在這裡:https://github.com/dbyoung720/DString2VCString

其它 C++ 類,可以用類似方法。
記錄儲存一下。
有不對的地方,還請高手指點。