我在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。 –