【发布时间】:2019-08-18 00:36:32
【问题描述】:
当我从 Delphi 6 迁移到 Delphi 10.2 Tokyo 当我尝试将 ^PChar 的指针转换为 PChar 数组时出现错误
type
PServEnt = ^TServEnt;
TServEnt = packed record
s_name: PChar; // official service name
s_aliases: ^PChar; // alias list
s_port: Smallint; // protocol to use
s_proto: PChar; // port #
end;
function TIdStackWindows.WSGetServByPort(
const APortNumber: Integer): TIdStrings;
var
ps: PServEnt;
i: integer;
p: array of PChar;
begin
Result := TIdStringList.Create;
p := nil;
try
ps := GetServByPort(HToNs(APortNumber), nil);
if ps <> nil then
begin
Result.Add(ps^.s_name);
i := 0;
p := Pointer(ps^.s_aliases); // get error Incompatible types: 'Dynamic array' and 'Pointer'
while p[i] <> nil do
begin
Result.Add(PChar(p[i]));
inc(i);
end;
end;
except
Result.Free;
end;
end;
此代码在 Delphi 2010 中运行良好,如何在 Delphi 10.2 Tokyo 中使其正确
【问题讨论】:
-
仅供参考,这是非常古老的 Indy 代码。
TIdStringList在 Indy 中不再存在,它于 2007 年被删除。TIdStackWindows.WSGetServByPort()在 2010 年针对 Unicode 进行了更新,后来重新编写为TIdStackWindows.AddServByPortToList()。它的实现与此处显示的完全不同。您需要升级到最新版本的 Indy。 -
谢谢@RemyLebeau,我用的Indy10自带Delphi 10.2,所有错误都消失了
标签: delphi delphi-10.2-tokyo char-pointer