我在Delphi中從FPC DLL獲取String
的長度時遇到問題。這很奇怪,因爲我可以從DLL中取回String
,但我無法獲得它的長度。FPC和Delphi之間的字符串
德爾福:
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
function Test(const S: String): Integer; cdecl; external 'c:\Project1.dll';
var
A: String;
begin
A := 'test';
WriteLn(Test(A)); // 1 ?
ReadLn;
end.
FPC:
library project1;
{$mode ObjFPC}{$H+}
uses
Classes;
function Test(const A: String): Integer; cdecl; export;
begin
Result := Length(A);
end;
exports Test;
end.
沒有執行轉換,也沒有性能損失。如果UnicodeString爲空,則將'UnicodeString'強制轉換爲'PWideChar'只會檢索指向UnicodeString字符數據的指針或指向靜態'#0'字符的指針。 –
PWideChar創造奇蹟! – user3060326
FPC中的字符串總是AnsiString,Delphi中的AnsiString或UnicodeString似乎並不重要。最好強調FPC.AnsiString不等於Delphi.AnsiString。 –