我在与 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 中的“调试输出”窗口?理想情况下,只针对那组特定的消息?
最佳答案
通常这是由于应用程序(或在本例中为链接库)通过 LoadLibrary[Ex] 等动态加载和卸载所致。它可能还在该过程中创建/销毁线程。
我不知道有什么方法可以抑制单个调试输出消息。您可以通过自己加载库并在调用期间持有它的句柄来防止特定的重复加载/卸载(这应该防止操作系统卸载它)。但是,这不是一个很好的通用解决方案(例如,库可能被[不良]编码以依赖于在每次调用之间未初始化的 DLL,在这种情况下,变通方法可能会改变行为)。
在更高的层次上,保持与数据库的连接打开可能会完成同样的事情,但这取决于 SQL native 客户端库的实现。不过,这就是我可能会尝试的方法(或者只是忽略调试跟踪输出)。
关于c++ - sqlnclir.rll 被连续加载和卸载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/309006/