У меня проблема с проектом Delphi 2009: он не может инициализировать Indy 10! Этот код работал отлично в Delphi 2007 (хотя мы, возможно, использовали более старую версию Indy, но я подозреваю, что это не имеет к этому отношения);Почему Indy 10 не инициализируется?
Первоначальный вызов 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 Allright, с этими деталями версии:
File Version : 5.1.2600.5512 (xpsp.080413-0852)
Description : Windows Socket 2.0 32-Bit DLL
Copyright : © Microsoft Corporation. All rights reserved.
(это показывает, что я нахожусь на WinXP кстати).
Глупые вещи в том, что когда я смотрю на сам процесс (используя «Process Explorer»), я вижу, что процесс уже открыл эту DLL. Причина «WS2_32.DLL» уже загружена, похоже, потому, что мы также используем модуль RTL Winsock.pas в этом проекте. Данное устройство статически связано с «wsock32.dll», которое имеет зависимость от WS2_32.DLL, поэтому есть.
Кто-нибудь знает, почему этот код работал нормально раньше (в Delphi 2007), и теперь (в Delphi 2009) он внезапно ломается?
И это неспособность повторно открыть общеизвестное dll ws2_32, или здесь действительно что-то не так? (Я проверял: у меня только 1 версия этих DLL присутствует в моей системе).
Еще лучше: может ли кто-нибудь помочь мне исправить это?
Запустили ли вы ProcMon или FileMon при переходе по этим строкам в Indy? Можете ли вы написать небольшую простую программу, которая минимально воспроизводит проблему? Происходит ли такая же проблема на всех машинах или только на одной машине? – 2008-10-15 18:32:05