原因:虽然包含了windows.h,但未定义_WIN32_WINNT。
因为在winbase.h (包含在windows.h中) 中, TryEnterCriticalSection只有定义了_WIN32_WINNT 且 _WIN32_WINNT>= 0x0400 时才会被定义。所以解决方法是在编译选项中加入 /D "_WIN32_WINNT=0x0500"。
附:_WIN32_WINNT 与 windows 版本的对应关系
| _WIN32_WINNT | Windows 版本 |
| 0x0500 | Windows 2000 |
| 0x0501 | Windows XP |
| 0x0502 | Windows Server 2003 |
| 0x0600 | Windows Vista |
| 0x0601 | Windows 7 |
Reference:
1. 修改WINVER和_WIN32_WINNT: http://msdn.microsoft.com/zh-tw/library/6sehtctf.aspx
2. TryEnterCriticalSection function: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686857(v=vs.85).aspx

本文介绍了解决在使用TryEnterCriticalSection时遇到未定义问题的方法。通过设置编译选项来定义_WIN32_WINNT宏,确保其值满足所需Windows版本的要求。文中还提供了_WIN32_WINNT与不同Windows版本之间的对应关系。

2368

被折叠的 条评论
为什么被折叠?



