concentrate on c/c++ related technology

plan,refactor,daily-build, self-discipline,

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  37 Posts :: 1 Stories :: 12 Comments :: 0 Trackbacks

常用链接

留言簿(9)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

我在MSVC6里的win32 console工程里面写了一段这样的代码,已经去掉了不必要的代码已达到注意重点地目点:
#include  <winbase.h>
#include  <windows.h>
switch( dwWaitResult = ::SignalObjectAndWait(
                                   m_hLogItemSendEvent,
                                   m_hLogItemReceivedEvent,
                                   MUTEX_LOCK_TIMEOUT,
                                   FALSE ) )
    {
    case WAIT_OBJECT_0:
               ::ResetEvent( m_hLogItemReceivedEvent );
               ::ResetEvent( m_hLogItemSendEvent );
    break;
    case WAIT_TIMEOUT:
    throw AutoLock::CAutoLockTimeoutExc( MUTEX_LOCK_TIMEOUT * 10 );
    break;
    default:
    throw AutoLock::CAutoLockWaitExc( dwWaitResult, ::GetLastError() );
    }
编译以后,得到以下两个错误:

error C2039: 'SignalObjectAndWait' : is not a member of '`global namespace''
error C2065: 'SignalObjectAndWait' : undeclared identifier

我在msdn上面已经查找到了SignalObjectAndWait在winbase里面声明,而在windows里面定义的。但是我在上面的代码片断里面已经给出了相关头文件。却在编译的时候出现两个错误。

问题解决如下:
#if(_WIN32_WINNT >= 0x0400)
WINBASEAPI
DWORD
WINAPI
SignalObjectAndWait(
    IN HANDLE hObjectToSignal,
    IN HANDLE hObjectToWaitOn,
    IN DWORD dwMilliseconds,
    IN BOOL bAlertable
    );
#endif /* _WIN32_WINNT >= 0x0400 */
在我英文操作系统里面的版本过低,导致出现无法进入上述条件编译里面,因此需要做的事情是,要么将条件编译注释掉,其实问题也不大,反正以后也不会有什么变动,要么就是在stdafx.h最前面重新定义一个_WIN32_WINNT,并且这个定义值应该要大于或者等于0x0400.这样才是okay的。
一些其他信息:
http://topic.csdn.net/u/20080429/16/c12ef43a-5eba-435e-b0bf-f49233cf1d5e.html
http://www.codeguru.com/forum/showthread.php?t=451931


posted on 2008-04-29 19:38 jolley 阅读(718) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理