Delphi string 字串如何傳遞給 C++ string
阿新 • • 發佈:2021-01-21
在 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++ 類,可以用類似方法。
記錄儲存一下。
有不對的地方,還請高手指點。