2012-04-05 37 views
2

我在Visual Studio 2005中有一个使用SQL Server(v2000)驱动程序连接到数据库(SQL Server 2005)的C++ COM dll。我们最近被我们的数据库团队委托将SQL Server驱动程序从SQL Server(v2000)升级到SQL Native Client(v2005)或SQL Server Native Client 10.0(v2007)。regsvr32导致在使用SQL Native Client(v2005)时CDatabase会破坏

应用程序构建得很好。然后,当我去执行DLL上的regsvr32命令来注册它的COM,应用程序挂起。当我通过代码进行调试时,我发现在主应用程序的InitInstance(从CWinApp继承)的InitInstance中,应用程序使用存储过程将启动消息记录到数据库。

调试到该日志消息显示CDatabase对象被创建执行存储过程。存储过程正确执行;该消息被记录到数据库并且执行返回到C++代码。然后,当CDatabase对象关闭时(通过调用CDatabase :: Close())应用程序挂起。我调试进入的CDatabase代码,发现的CDatabase :: Close()方法的调用是为了

AFX_SQL_SYNC(::SQLFreeConnect(m_hdbc)); 

它在这个调用执行不回发。调试器回到(运行)状态,没有回来。当我尝试执行Debug - > Break All时,我收到一条消息,指出没有正在运行的线程,并且该进程可能会死锁。

这只发生在对REGSVR32的调用过程中。如果我为regsvr32部分选择Sql Server驱动程序,然后将其更改为Sql Native Client或Sql Server Native Client v10.0,则该应用程序可以正常工作。

我正在与微软合作,但我们的时间不够了。任何帮助或想法将大大apprecaited!

感谢,

+0

是否有其他线程?他们现在在做什么? – selalerer 2012-04-05 15:18:02

+0

此链接http://support.microsoft.com/kb/140346提到它可能因“旧版本的Ocd25.lib被链接到”而失败。 – selalerer 2012-04-05 15:53:31

回答

0

在下面的链接的家伙似乎被动态加载在他的主APP的ODBC DLL和不仅在DLL已经解决了它。这可能以某种方式适用于你的情况?

SQLFreeHandle Deadlock Issue?

相关问题