1

私は、SQL Server 2000 と通信する C++ アプリケーションで SQL Native Client 9 を使用しています。現在、デバッグ作業を行っていますが、気になる点があることに気付きました (主に、かなりの混乱を引き起こしているため)。 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 の [デバッグ出力] ウィンドウにスパム送信されないようにするにはどうすればよいですか? 理想的には、その特定のメッセージ セットに対してのみですか?

4

1 に答える 1

1

通常、これは、アプリケーション (またはこの場合はリンクされたライブラリ) が LoadLibrary[Ex] などを介して動的にロードおよびアンロードすることが原因です。おそらく、プロセスでスレッドを作成/破棄しています。

個々のデバッグ出力メッセージを抑制する方法がわかりません。ライブラリを自分でロードし、呼び出しの間ハンドルを保持することで、特定の繰り返しのロード/アンロードを防ぐことができる場合があります (OS がライブラリをアンロードするのを防ぐ必要があります)。ただし、これは適切な一般的な解決策ではありません (たとえば、各呼び出し間で初期化されていない DLL に依存するようにライブラリが [不十分に] コーディングされている可能性があります。この場合、回避策によって動作が変わる可能性があります)。

より高いレベルでは、データベースへの接続を開いたままにしておくと同じことが達成される可能性がありますが、これは SQL ネイティブ クライアント ライブラリの実装に依存します。ただし、それは私がおそらく試みることです (または、デバッグ トレース出力を単に無視します)。

于 2008-11-21T17:59:14.637 に答える