1

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つしかありません)。

さらに良いこと:これを修正するのを手伝ってくれる人はいますか?

4

3 に答える 3

2

私はついにこれに対する答えを見つけました:影響を受けたアプリケーションには、System.dcuの一部をランダムに損傷するコードフックが少し含まれていました!(参考:私たちは、madshiのmadCodeHookライブラリのDelphi 2009ベータ版を使用しています)。別のコードフックライブラリに切り替えるとすぐに、これらの症状は消えました...ベータソフトウェアを使用すると、それが起こると思います。とにかく、これでお邪魔してすみません。問題が解決しました!

于 2008-11-04T13:55:28.413 に答える
0

これは単純すぎるかもしれませんが、関連するユニットが uses 句にリストされている順序を変更しようとしましたか? これは、これらの状況で役立つことがあります。

于 2008-10-16T00:56:08.693 に答える
0

Win32 API (WinSock API を含む) の Ansi/Unicode 呼び出しに問題がある可能性があると思います。AnsiString/AnsiPchar を使用するコードが XxxA 関数 (MessageBoxA など) を呼び出し、String/Pchar が xxW 関数 (MessageBoxW など) を呼び出すかどうかを確認します。Delphi の以前のバージョンでは、文字列は AnsiString のエイリアスであり、XxxA Win API 関数が使用されていましたが、現在、文字列はデフォルトで Unicode であり、XxxW 関数を使用する必要があります。

于 2008-10-17T08:37:23.223 に答える