Проблема, с которой вы столкнулись, заключается в том, что ваш код на Object Pascal, предназначенный для работы с LDAP и ADSI, выдает исключение при выполнении на Windows Server 2008 R2 64-bit. Ошибка возникает в функции MkParseDisplayNameEx, которая используется для преобразования пути в объект COM. Это может быть связано с особенностями работы с COM-объектами в 64-битных версиях Windows.
Подтвержденный ответ:
Прежде всего, убедитесь, что вы используете версию ADSIEdit.dll, совместимую с 64-битной версией Windows. Также, проверьте, что все компоненты RSAT, необходимые для работы с ADSIEdit.dll, установлены корректно.
Шаги для устранения ошибки:
Проверка библиотек: Убедитесь, что вы используете 64-битные версии всех необходимых библиотек. В случае с Windows Server 2008 R2 64-bit, вам потребуется 64-битная версия ADSIEdit.dll.
Код на Delphi: В вашем коде на Delphi, возможно, потребуется изменить тип проекта на "Win32" (32-битный) или "Win64" (64-битный) в соответствии с требуемой версией DLL.
delphi
function GetObject(APath: String): IDispatch;
var
Moniker: IMoniker;
Eaten: Integer;
BindContext: IBindCtx;
Dispatch: IDispatch;
begin
Result := nil;
OleCheck(CreateBindCtx(0, BindContext));
OleCheck(MkParseDisplayNameEx(BindContext, PChar(APath), Eaten, Moniker));
OleCheck(Moniker.BindToObject(BindContext, nil, IUnknown, Dispatch));
Result := Dispatch;
end;
Обратите внимание на тип строки, передаваемой в MkParseDisplayNameEx. В примере выше используется PChar, что является 32-битным указателем. Для 64-битных приложений необходимо использовать другой тип указателя.
Проверка параметров: Убедитесь, что строка APath корректно обработана и передается в нужной кодировке.
Альтернативные методы: Если использование MkParseDisplayNameEx по-прежнему вызывает проблемы, можно попробовать альтернативный метод через функцию ADsGetObject, но это также может потребовать проверки совместимости библиотек.
Тестирование: Постройте ваше приложение для 64-битной архитектуры и запустите его, чтобы увидеть, не исчезнет ли ошибка. Также полезно будет проверить, возникает ли та же ошибка, если собрать программу в Visual Studio в C++.
Логирование: Для более глубокого анализа ошибок можно добавить логирование в ваш код, чтобы отследить, какие именно операции вызывают исключение.
Если после выполнения этих шагов проблема сохраняется, возможно, потребуется более детальный анализ конфигурации системы и используемых библиотек. Не забывайте также о возможности обновления компонентов Windows, что может решить проблему, связанную с устаревшими или несовместимыми версиями библиотек.
Надеемся, что эти рекомендации помогут вам устранить возникшую проблему и успешно работать с LDAP в Delphi на Windows Server 2008 R2 64-bit.
Вы столкнулись с ошибками при работе с LDAP в Delphi на 64-битной версии Windows Server 2008 R2, связанными с использованием функции `MkParseDisplayNameEx` и возможной несовместимостью компонентов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS