2012-04-05 21 views
2

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と一緒に作業していますが、時間がありません。どんな助けや考えも大いに評価されるでしょう!

おかげで、

+0

他のスレッドはありますか?この時、彼らは何をしていますか? – selalerer

+0

このリンクhttp://support.microsoft.com/kb/140346には、「古いバージョンのOcd25.libがリンクされているため」に失敗する可能性があることが記載されています。 – selalerer

答えて

0

下のリンクで男が動的にのみDLLに彼の主なAPPにODBC DLLをロードしないことによってそれを解決しているように見えます。これはあなたの場合に何らかの形で適用可能でしょうか?

SQLFreeHandle Deadlock Issue?