Я работаю с SQL Native Client 9 в приложении C++, которое взаимодействует с SQL Server 2000. Я работаю над отладкой прямо сейчас, но кое-что, что я заметил, что меня беспокоит (в основном потому, что создает значительный беспорядок), это sqlnclir. rll загружается и выгружается непрерывно, и следующие строки рассылаются в мое окно вывода отладки.
'my_app.exe': Loaded 'C:\WINDOWS\system32\sqlnclir.rll', Binary was not built with debug information. The thread 'Win32 Thread' (0x9f4) has exited with code 0 (0x0). 'my_app.exe': Unloaded 'C:\WINDOWS\system32\sqlnclir.rll'
Идентификатор после «Win32 Thread» изменяется, но код выхода всегда равен 0.
Почему .rll загружается и выгружается постоянно вот так и как я могу предотвратить это?
Если на приведенный выше вопрос невозможно ответить, как я могу предотвратить спам приведенных выше сообщений в окно вывода отладки в MSVC 2005? В идеале только для этого конкретного набора сообщений?





Обычно это происходит из-за того, что приложение (или в данном случае связанная библиотека) динамически загружает и выгружает через LoadLibrary [Ex] и т. д. Вероятно, это также создает / уничтожает поток в процессе.
Я не знаю способа подавить отдельные выходные сообщения отладки. Вы можете предотвратить конкретную повторную загрузку / выгрузку, загрузив библиотеку самостоятельно и удерживая ее дескриптор на время вызовов (что должно помешать ОС выгрузить ее). Однако это не очень хорошее общее решение (например, библиотека может быть [плохо] закодирована, чтобы полагаться на то, что DLL не инициализируется между каждым вызовом, и в этом случае обходной путь может изменить поведение).
На более высоком уровне сохранение открытого соединения с базой данных может привести к тому же результату, но это зависит от реализации собственной клиентской библиотеки SQL. Хотя я бы, наверное, попробовал (или просто проигнорирую вывод трассировки отладки).