2012-01-22 16 views
2

私のアプリケーションをDelphi 2007からDelphi XEにアップグレードしています。私は個人的に書かれたSocketコンポーネントを持っています。新しい環境(XE)では、正しく動作しません。同じコードはここに私のコードの断片ですデルファイ2007Delphi XEとWinsock

で動作します:

uses WinSock; 

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); 
end; 

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; 

initialization 
    Startup; 
finalization 
    Cleanup; 
end. 

ProtoEntが常に割り当てられていない(すなわち=ゼロ)!!!!!

なぜですか?

私はこの問題を解決するために狂ったつもりです... おかげ

エンツォ

+2

あなたの質問を更新してください。そのままでは、あなたが投稿したコードでは問題は再現されません。あなたの質問を更新し、修正してください。 –

答えて

4

あなたのコードビット

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 error codes

を確認した後、それが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; 
+0

元のコードは初期化セクションでStarUpを呼び出し、失敗した場合は例外を発生させます。エラーの根本原因は何でしょうか? – mjn

+0

@mjnわからない。初期化コードも私のために働く。問題には表示されていないOPコードのローカルな問題があるはずです。 – kludg

+0

私はあなたの提案を試みましたが、エラー#11004があります(要求された名前は有効ですが、ネームサーバにインターネットIPアドレスはありません) アイデアはありますか? –

関連する問題