Почему Indy 10 не инициализируется? [закрыто]

У меня проблема с проектом 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 btw).

Глупая вещь в том, что, когда я смотрю на сам процесс (используя «Process Explorer»), я вижу, что процесс уже открыл эту DLL. Причина «WS2_32.DLL» уже загружена, похоже, потому, что мы также используем модуль RTL Winsock.pas в этом проекте. Это устройство статически связано с «wsock32.dll», которое имеет зависимость от WS2_32.DLL, поэтому есть.

Кто-нибудь знает, почему этот код работал нормально раньше (в Delphi 2007), и теперь (в Delphi 2009) он внезапно ломается?

И является ли это невозможностью повторно открыть общедоступное dll ws2_32, или здесь действительно что-то не так? (Я проверял: у меня только 1 версия этих DLL присутствует в моей системе).

Еще лучше: может ли кто-нибудь помочь мне исправить это?

delphi,indy,

1

Ответов: 3


2 принят

Наконец, я нашел ответ на этот вопрос: В затронутых приложениях было немного кода, который случайно повредил части System.dcu! (FYI: Мы используем бета-версию Delphi 2009 в библиотеке madCodeHook от madshi). Как только мы переключились на другую библиотеку для перехвата кода, эти симптомы исчезли ... Наверное, это то, что происходит, когда вы используете бета-программное обеспечение. Во всяком случае, извините за то, что беспокоило вас этим. Задача решена!


0

Это может быть чрезмерно упрощенным, но попытались ли вы изменить порядок, в котором соответствующие единицы перечислены в разделе использования? Иногда это помогает в таких ситуациях.


0

Я думаю, что это может быть проблема с вызовами Ansi / Unicode Win32 API (включая WinSock API). Убедитесь, что код с использованием AnsiString / AnsiPchar вызывает функции XxxA (например, MessageBoxA) и функцию вызова xxW для String / Pchar (например, MessageBoxW). В предыдущих версиях Delphi String был псевдоним AnsiString, и была использована функция XxxA Win API, но теперь String по умолчанию имеет unicode, а функции XxxW должны использоваться.

Дельфы, Инди,
Похожие вопросы