我正在使用与SQL Server 2000进行通信的C ++应用程序中的SQL Native Client 9.我正在调试现在的东西,但是我注意到的事情让我感到困扰(主要是因为它造成了很大的混乱)正在连续加载和卸载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”更改后的ID,但退出代码始终为0.
为什么.rll会像这样不断加载和卸载,如何防止它发生?
如果以上内容不是一个可行的问题,我怎样才能阻止上述消息被垃圾邮件发送到MSVC 2005的“调试输出”窗口?理想情况下,仅针对特定的消息集?
答案 0 :(得分:1)
通常这是由于应用程序(或在这种情况下,链接库)通过LoadLibrary [Ex]等动态加载和卸载。它可能还在创建/销毁过程中的线程。
我不知道有什么方法可以抑制单个调试输出消息。您可以通过自己加载库并在调用期间持有句柄来阻止特定的重复加载/卸载(这应该阻止操作系统卸载它)。但是,这不是一个好的通用解决方案(例如,库可能[编码很差]依赖于每次调用之间未初始化的DLL,在这种情况下,变通方法可能会改变行为)。
在更高级别,保持对数据库的连接可能会完成同样的事情,但这取决于SQL本机客户端库的实现。这就是我可能会尝试的(或者只是忽略调试跟踪输出)。