Если вы немного измените свой код
procedure TForm1.GetProtocolClick(Sender: TObject);
var
ProtoEnt: PProtoEnt;
FProtocol: Integer;
begin
FProtocol := IPPROTO_TCP;
ProtoEnt := getprotobynumber(FProtocol);
if Assigned(ProtoEnt)
then ShowMessage(ProtoEnt.p_name)
else ShowMessage(IntToStr(WSAGetLastError));
end;
, вы увидите код ошибки;после этого проверьте коды ошибок WinSock
Я попробовал следующий, он отлично работает на XE:
var
WSAData: TWSAData;
procedure Startup;
begin
if WSAStartup($0101, WSAData) <> 0
then raise Exception.Create('WSAStartup');
end;
procedure Cleanup;
begin
if WSACleanup <> 0
then raise Exception.Create('WSACleanup');
end;
procedure TForm1.Button5Click(Sender: TObject);
var
ProtoEnt: PProtoEnt;
FProtocol: Integer;
begin
StartUp;
FProtocol := IPPROTO_TCP;
ProtoEnt := getprotobynumber(FProtocol);
if Assigned(ProtoEnt)
then ShowMessage(ProtoEnt.p_name)
else ShowMessage(IntToStr(WSAGetLastError));
CleanUp;
end;