1

我正在与 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 线程”后的 ID 发生变化,但退出代码始终为 0。

为什么 .rll 会像这样不断地加载和卸载,我该如何防止它发生?

如果上述问题无法回答,我如何防止上述消息被垃圾邮件发送到 MSVC 2005 中的“调试输出”窗口?理想情况下,只针对那组特定的消息?

4

1 回答 1

1

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

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

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

于 2008-11-21T17:59:14.637 回答