Delphi 2009 プロジェクトに問題があります。Indy 10 を初期化できません。このコードは、以前は Delphi 2007 で問題なく動作していました (ただし、古いリビジョンの Indy を使用していた可能性がありますが、それとはあまり関係がないと思われます)。
IdWinsock2.InitializeWinSock() への最初の呼び出しで、次の例外が発生します (エラー コード 998)。
Project EAServer.exe raised exception class EIdWinsockStubError with message
'Error on loading Winsock2 library (WS2\_32.DLL): Invalid access to memory location'.
しかし、ws2_32.dll は C:\Windows\System32 にあります。バージョンの詳細は次のとおりです。
File Version : 5.1.2600.5512 (xpsp.080413-0852)
Description : Windows Socket 2.0 32-Bit DLL
Copyright : © Microsoft Corporation. All rights reserved.
(これは、私がWinXPを使用していることを示しています)。
ばかげたことは、(「プロセス エクスプローラー」を使用して) プロセス自体を見ると、プロセスが既にこの DLL を開いていることがわかります。「WS2_32.DLL」が既にロードされているのは、このプロジェクトでも RTL ユニット Winsock.pas を使用しているためと思われます。このユニットは、WS2_32.DLL に依存する「wsock32.dll」に静的にリンクされているので、そこにあります。
このコードが以前 (Delphi 2007) で正常に動作し、現在 (Delphi 2009) で突然壊れた理由を知っている人はいますか?
そして、ws2_32 dll の一般的な知識を再び開くことができないのですか、それとも本当に何か問題があるのでしょうか? (私はチェックしました:私のシステムにはこれらのDLLのバージョンが1つしかありません)。
さらに良いこと:これを修正するのを手伝ってくれる人はいますか?