Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Отладка памяти и исключения в Delphi 2009: Решение проблемы с OCI.dll и ntdll.dll на Windows 7

Delphi , Базы данных , Oracle

Разработчики, работающие с Delphi 2009, могут столкнуться с неожиданными ошибками при работе с внешними библиотеками, такими как OCI.dll. Одной из таких проблем является исключение в ntdll.dll, возникающее при закрытии приложения после одновременного подключения к Oracle через OCI.dll и вызова метода веб-сервиса. Это может быть вызвано проблемами с управлением памятью или несовместимостью библиотек.

Пример кода, вызывающего проблему

Для воспроизведения проблемы необходимо:

  1. Создать новое VCL Forms Application.
  2. Разместить на форме компонент TOracleSession из пакета DOA (Direct Oracle Access) или ODAC.
  3. Разместить на форме кнопку TButton.
  4. Назначить обработчик события нажатия кнопки, в котором происходит подключение к базе данных Oracle и вызов метода веб-сервиса.

Пример кода обработчика события нажатия кнопки:

procedure TForm1.Button1Click(Sender: TObject);
var
   MyWebService3Soap: WebService3Soap;
   s: string;
begin
   OracleSession1.LogonDatabase := 'SomeLogonDB';
   OracleSession1.LogonUsername := 'SomeUsername';
   OracleSession1.LogonPassword := 'SomePassword';
   OracleSession1.Connected := True;
   ShowMessage('Connected');

   MyWebService3Soap := GetWebService3Soap();
   s := MyWebService3Soap.HelloWorld; // Простой вызов метода, возвращающего строку
   ShowMessage(s);
end;

При выполнении этой последовательности действий в среде Delphi 2009 в 32-битной системе Windows 7 и использовании Oracle Instant Client 10.2.0.4 или 10.2.0.5 может возникнуть исключение в ntdll.dll при закрытии приложения.

Возможные причины проблемы

Проблема может быть связана с некорректным выделением памяти, вызванным несовместимостью между компонентами Delphi и внешними библиотеками. Также возможно, что проблема связана с так называемым "DLL hell" — конфликтом между различными версиями библиотек.

Шаги к решению

  1. Использование FastMM в полнофункциональном режиме отладки. Это может дать информацию о проблемах с памятью.
  2. Использование инструментов, таких как madExcept, для получения полезной трассировки стека.
  3. Изменение порядка инициализации компонентов. Попробуйте сначала инициализировать OCI, а затем веб-сервисы, или наоборот.
  4. Контроль Winsock. Окружите вызовы OCI и веб-сервисов вызовами WSAStartup / WSACleanup для очистки Winsock.

Подтвержденное решение

Пользователь обнаружил, что проблема связана с ошибкой в Delphi 2009 при отладке в Windows 7. Решением стало применение патча, доступного для Delphi 2009 и C++Builder 2009:

ID: 27476, Hotfix 2 для Delphi 2009 и C++Builder 2009

После применения этого патча проблема была решена.

Заключение

Работа с внешними библиотеками в Delphi может быть непростой задачей, особенно при использовании старых версий среды разработки. Важно следить за обновлениями и патчами, а также использовать инструменты для отладки памяти, чтобы своевременно выявлять и устранять подобные проблемы.

Создано по материалам из источника по ссылке.

Разработчики Delphi 2009 сталкиваются с проблемой исключения в ntdll.dll при работе с Oracle через OCI.dll и вызовах веб-сервиса на Windows 7, что может быть связано с некорректным управлением памятью и несовместимостью библиотек.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Oracle ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 14:27:54/0.0032479763031006/0