У меня проблема с проектом 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 : A© Microsoft Corporation. All rights reserved.
(это показывает, что я нахожусь на WinXP btw).
Глупая вещь в том, что, когда я смотрю на сам процесс (используя «Process Explorer»), я вижу, что процесс уже открыл эту DLL. Причина «WS2_32.DLL» уже загружена, похоже, потому, что мы также используем модуль RTL Winsock.pas в этом проекте. Это устройство статически связано с «wsock32.dll», которое имеет зависимость от WS2_32.DLL, поэтому есть.
Кто-нибудь знает, почему этот код работал нормально раньше (в Delphi 2007), и теперь (в Delphi 2009) он внезапно ломается?
И является ли это невозможностью повторно открыть общедоступное dll ws2_32, или здесь действительно что-то не так? (Я проверял: у меня только 1 версия этих DLL присутствует в моей системе).
Еще лучше: может ли кто-нибудь помочь мне исправить это?