readdirectorychangesw 链接错误 undeclared identifier 解决方法

来源:互联网 发布:淘宝网软牛皮女包 编辑:程序博客网 时间:2024/05/16 01:06

From: http://aaronaddis.blog.163.com/blog/static/1270893292010431101042517/

今天在编程中遇到了文件监控的东西,在使用readdirectorychangesw 函数是老是报未定义的错误,看了MSDN,包含了windows.h和Winbase.h 两个头文件,但是还是一样的错。查找之后发现了解决方案和原理:


添加  #define   _WIN32_WINNT   0x0500,且在windows.h头文件定义之上。
即:

#define   _WIN32_WINNT   0x0500

#include <windows.h>


原理:
1.ReadDirectoryChangesW函数定义在winbase.h头文件中,,通常windows下编程一般都包含windows.h文件,而windows.h中包含了winbase.h,所以不用再包含winbase.h
2.在winbase.h中ReadDirectoryChangesW原型定义如下:
#if(_WIN32_WINNT >= 0x0400)
WINBASEAPI
BOOL
WINAPI
ReadDirectoryChangesW(
    HANDLE hDirectory,
    LPVOID lpBuffer,
    DWORD nBufferLength,
    BOOL bWatchSubtree,
    DWORD dwNotifyFilter,
    LPDWORD lpBytesReturned,
    LPOVERLAPPED lpOverlapped,
    LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
    );
#endif /* _WIN32_WINNT >= 0x0400 */

可以看出,这是一个条件编译语句,只有定义了_WIN32_WINNT 这段代码才会被编译器加入,因此需要定义
_WIN32_WINNT ,其值应大于等于0x0400(好像0x0400表示Windows2000,0x0500表示Windows XP),且需要
定义在包含windows.h(或winbase.h)的定义语句之前

原创粉丝点击