VS2008 中的 C++ 项目有效,但在 VS2010 中无效

Posted

技术标签:

【中文标题】VS2008 中的 C++ 项目有效,但在 VS2010 中无效【英文标题】:C++ project in VS2008 works, but in VS2010 does not 【发布时间】:2013-02-05 18:47:24 【问题描述】:

我在 VS2008 中构建了 PostgreSQL ODBC 驱动程序,然后运行 ​​odbcad32.exe,创建 DSN 并单击测试按钮。它工作正常。 然后我复制文件夹并在 VS2010 中重建它,然后执行相同的操作:我收到错误消息 COuld not send query(Connection dead)。

然后我做了:在 VS2005 中编译 - 一切正常。 在 Vs2012 中 - 不起作用。 我在 Debugger 中检查:是的,在短查询执行期间套接字已关闭,按钮 Test 生成类似以下查询序列的内容:

set DateStyle to 'ISO'
....
set extra_float_digits to 2
...
[5912-1.471]CC_send_query: conn=04460048, query='select oid, typbasetype from pg_type where typname = 'lo''
[5912-1.472]send_query: done sending query 63bytes flushed
[5912-1.473]in QR_Constructor
[5912-1.473]exit QR_Constructor
[5912-1.473]read -1, global_socket_buffersize=4096
[5912-1.474]Lasterror=10035
[5912-1.474](5)Error while reading from the socket. ERRNO=10035
[5912-1.475]CC_error_statements: self=04460048
[5912-1.475]CONN ERROR: func=CC_send_query, desc='', errnum=107, errmsg='No response from the backend'
...
[5912-1.481]CC_lookup_characterset: entering...
[5912-1.481]CC_send_query: conn=04460048, query='select pg_client_encoding()'
[5912-1.482]CC_error_statements: self=04460048
[5912-1.482]CONN ERROR: func=CC_send_query, desc='', errnum=104, errmsg='Could not send Query(connection dead)'

这种不同行为的原因可能是什么?

【问题讨论】:

【参考方案1】:

“问题”是由于VS2010 EWOULDBLOCK(在errno.h中定义)!= WSAEWOULDBLOCK,而开发者依赖这两个值是相同的,类似于:

r = recv( ... );
if (r == -1 && WSAGetLastError() == EWOULDBLOCK)  ... 

以前适用于旧版本 VS 的功能不再适用。

【讨论】:

以上是关于VS2008 中的 C++ 项目有效,但在 VS2010 中无效的主要内容,如果未能解决你的问题,请参考以下文章

VS2008(C++)-控制台项目中LNK2005错误的问题

VS2010 中的 C++ 智能感知

如何向我的程序添加描述(-> 任务管理器中的描述列)(VS 2008,C++)

C++谷歌开源项目glog学习笔记

VS 2008 C++如何制作一个没有.net依赖的项目

将托管 C++ 从 vs2003 移植到 vs2008 的问题