PRB: C2065/C2064 Errors when Using Win32 APIs in MFC Program (151666)
The information in this article applies to:
- The Microsoft Foundation Classes (MFC), when used with:
- Microsoft Visual C++, 32-bit Editions 4.0
- Microsoft Visual C++, 32-bit Editions 4.1
This article was previously published under Q151666 SYMPTOMS
Using some Win32 APIs, such as PurgeComm() and RegFlushKey(), in an
AppWizard generated application will cause C2065 and C2064 compilation
errors. For example, a call to the PurgeComm() function will produce the
following errors:
error C2065: 'PurgeComm' : undeclared identifier
error C2064: term does not evaluate to a function
CAUSE
In Visual C++ 4.x, AppWizard automatically adds a macro definition for
VC_EXTRALEAN to the project's precompiled header. Its purpose is to help
speed up compilation by excluding less-frequently used declarations from
the various Windows header files.
When VC_EXTRALEAN is defined in the precompiled header, the following SDK
symbols get defined in afxv_w32.h:
#define WIN32_EXTRA_LEAN
#define NOSERVICE
#define NOMCX
#define NOIME
#define NOSOUND
#define NOCOMM
#define NOKANJI
#define NORPC
#define NOPROXYSTUB
#define NOIMAGE
#define NOTAPE
#ifndef NO_ANSIUNI_ONLY
#ifdef _UNICODE
#define UNICODE_ONLY
#else
#define ANSI_ONLY
#endif
#endif //!NO_ANSIUNI_ONLY
Because the macro NOCOMM is being defined, the prototype for PurgeComm() is
excluded. This behavior causes the errors.
RESOLUTION
One solution is to remove the #define VC_EXTRALEAN line from stdafx.h. This
keeps the Communication, Registry, and other areas of the Win32 APIs that
are not directly used by MFC in the project.
An alternative is to replace the "#define VC_EXTRALEAN" line with the set
of #define lines listed above, and then selectively remove those #define's
that should not be included. For instance, if the Communication APIs are
called, you may have all the #define lines listed above except the "#define
NOCOMM" line in the stdafx.h.
STATUS
This behavior is by design.
MORE INFORMATION
For complete information on what the macros listed above exclude, search
the windows.h and afxv_w32.h files for the symbols.
Modification Type: | Major | Last Reviewed: | 10/24/2003 |
---|
Keywords: | kbArchitecture kberrmsg kbprb KB151666 |
---|
|