2008-11-21 68 views
1

我正在与SQL Server 2000通信的C++应用程序中使用SQL Native Client 9.我正在调试的东西,但我注意到困扰我(主要是因为它造成了显着的混乱)是sqlnclir.rll被连续加载和卸载,以下行被垃圾邮件传到我的调试输出窗口。正在加载和卸载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线程”的变化,但退出代码的ID始终是0

为什么.rll正在加载和卸载经常这样,我怎么能阻止它从发生?

如果上述问题不是一个可行的问题,我该如何防止上述消息被垃圾邮件传送到MSVC 2005中的调试输出窗口?理想情况下,仅限于特定的消息集合?

回答

1

通常这是由于应用程序(或在这种情况下,一个链接库)通过LoadLibrary [Ex]等动态加载和卸载。它可能也创建/销毁进程中的线程。

我不知道有任何方法来抑制单独的调试输出消息。您可以通过自己加载库并在调用期间持有句柄(防止操作系统卸载它)来阻止特定的重复加载/卸载。但是,这不是一个好的通用解决方案(例如,库可能[编码不良]依赖于每次调用之间未初始化的DLL,在这种情况下,解决方法可能会改变行为)。

在更高层次上,保持连接对数据库开放可能会完成同样的事情,但这取决于SQL本机客户端库的实现。这是我可能会尝试,但(或只是忽略调试跟踪输出)。