Visual Studio 2005でSQL Server(v2000)ドライバを使用してデータベース(SQL Server 2005)に接続するC++ COM DLLがあります。私たちは最近、SQL Server(v2000)からSQL Native Client(v2005)またはSQL Server Native Client 10.0(v2007)にアップグレードするためにDBチームから任命されました。regsvr32は、SQLネイティブクライアント(v2005)を使用するとCDatabase destrucorをハングさせます。
アプリケーションはうまくいきます。次に、私がDLLにregsvr32コマンドを実行してCOMに登録すると、アプリケーションがハングします。コードをデバッグすると、メインAPP(CWinAppから継承)のInitInstanceで、アプリケーションがストアドプロシージャを使用してデータベースに起動メッセージを記録することがわかりました。
このログメッセージをデバッグすると、ストアドプロシージャを実行するCDatabaseオブジェクトが作成されていることがわかります。ストアドプロシージャは正しく実行されます。メッセージがデータベースに記録され、実行がC++コードに戻されます。 CDatabase :: Close()を呼び出すと、CDatabaseオブジェクトが閉じられると、アプリケーションがハングします。私はたCDatabaseコードにデバッグとのCDatabase ::閉じる()に呼び出しが
AFX_SQL_SYNC(::SQLFreeConnect(m_hdbc));
それは実行が返されないことを、この呼び出しでだに行われることがわかりました。デバッガは(実行中)状態に戻り、何も戻ってこない。デバッグ - >ブレークオールしようとすると、実行中のスレッドがなく、プロセスがデッドロックされている可能性があるというメッセージが表示されます。
これは、REGSVR32の呼び出し中にのみ発生します。また、regsvr32部分のSql Serverドライバを選択した場合は、SqlネイティブクライアントまたはSql Serverネイティブクライアントv10.0に変更してください。アプリケーションは正常に動作します。
私はこれもMicrosoftと一緒に作業していますが、時間がありません。どんな助けや考えも大いに評価されるでしょう!
おかげで、
他のスレッドはありますか?この時、彼らは何をしていますか? – selalerer
このリンクhttp://support.microsoft.com/kb/140346には、「古いバージョンのOcd25.libがリンクされているため」に失敗する可能性があることが記載されています。 – selalerer