Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL本机客户端(v2005)时,regsvr32导致CDATA基析构函数挂起 我在VisualStudio 2005中有一个C++ COM DLL,它使用SQLServer(V2000)驱动程序连接到数据库(SQL Server 2005)。我们的DB团队最近委托我们将SQL Server驱动程序从SQL Server(v2000)升级到SQL本机客户端(v2005)或SQL Server本机客户端10.0(v2007)_C++_Sql Server_Com+_Regsvr32 - Fatal编程技术网

使用SQL本机客户端(v2005)时,regsvr32导致CDATA基析构函数挂起 我在VisualStudio 2005中有一个C++ COM DLL,它使用SQLServer(V2000)驱动程序连接到数据库(SQL Server 2005)。我们的DB团队最近委托我们将SQL Server驱动程序从SQL Server(v2000)升级到SQL本机客户端(v2005)或SQL Server本机客户端10.0(v2007)

使用SQL本机客户端(v2005)时,regsvr32导致CDATA基析构函数挂起 我在VisualStudio 2005中有一个C++ COM DLL,它使用SQLServer(V2000)驱动程序连接到数据库(SQL Server 2005)。我们的DB团队最近委托我们将SQL Server驱动程序从SQL Server(v2000)升级到SQL本机客户端(v2005)或SQL Server本机客户端10.0(v2007),c++,sql-server,com+,regsvr32,C++,Sql Server,Com+,Regsvr32,应用程序构建得很好。然后,当我在DLL上执行regsvr32命令以将其注册为COM时,应用程序挂起。当我调试代码时,我发现在主应用程序的InitInstance(继承自CWinApp)中,应用程序使用存储过程将启动消息记录到数据库中 对该日志消息进行调试后,会发现创建了一个CDATA基本对象,该对象执行存储过程。存储过程执行正确;消息被记录到数据库,执行被返回到C++代码。然后,当CDatabase对象关闭时(通过调用CDatabase::Close()),应用程序挂起。我调试了CDatabas

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

对该日志消息进行调试后,会发现创建了一个CDATA基本对象,该对象执行存储过程。存储过程执行正确;消息被记录到数据库,执行被返回到C++代码。然后,当CDatabase对象关闭时(通过调用CDatabase::Close()),应用程序挂起。我调试了CDatabase代码,发现在CDatabase::Close()中调用了

AFX_SQL_SYNC(::SQLFreeConnect(m_hdbc));
在这个调用中,执行不会返回。调试器返回到(运行)状态,但没有返回任何内容。当我尝试执行Debug->Break All时,会收到一条消息,说明没有正在运行的线程,并且进程可能已死锁

这仅在调用REGSVR32期间发生。如果我为regsvr32部分选择Sql Server驱动程序,然后将其更改为Sql本机客户端或Sql Server本机客户端v10.0,则应用程序工作正常

我也在和微软合作,但时间不多了。任何帮助或想法都将不胜感激


谢谢,

下面链接中的家伙似乎已经解决了这个问题,他在主应用程序中动态加载ODBC DLL,而不仅仅是在DLL中。这是否适用于你的情况


下面链接中的家伙似乎已经解决了这个问题,他在主应用程序中动态加载ODBC DLL,而不仅仅是在DLL中。这是否适用于你的情况


还有其他线程吗?他们现在在做什么?这个链接提到它可能会失败,因为“一个旧版本的Ocd25.lib正在链接到”。还有其他线程吗?他们现在在做什么?这个链接提到它可能会失败,因为“一个旧版本的Ocd25.lib正在链接到”。