PRB: C2065 Error Occurs on GetWrapperWindow or Other Symbols (176487)
The information in this article applies to:
- Microsoft Visual C++, Macintosh Cross-Development Addon 4.0
- Microsoft Visual C++, Macintosh Cross-Development Addon 4.0b
This article was previously published under Q176487 SYMPTOMS
When using a function or a symbol dependent upon the Macintosh Operating
System headers, the following error message may appear:
error C2065: 'GetWrapperWindow' : undeclared identifier
CAUSE
The native Macintosh header, MACOS\WINDOWS.H (or others), was not included
before the Winwlm.h file.
RESOLUTION
Include the required header (macos/windows.h for GetWrapperWindow) before
including Winwlm.h for MFC applications. Winwlm.h is included in the
Afxwin.h file. For example:
#include <macname1.h>
#include <macos/windows.h>
#include <macname2.h>
#include <afxwin.h>
STATUS
This behavior is by design.
MORE INFORMATION
When targeting applications for the Macintosh platform, the Winwlm.h header
file is pulled in the default WLM libraries and declares many symbols
needed to use Macintosh specific objects from a Windows application. For
example, GetWrapperWindow returns the Macintosh window data structure
WindowRef underlying the given the Windows HWND.
This header file may be included in applications manually or automatically
pulled in when building MFC applications through the Afxwin.h header file.
For example:
afxwin.h
afx.h
afxver_.h
afxv_w32.h
windows.h // for Macintosh targets this is mac/include/windows.h
winwlm.h // where GetWrapperWindow, and so on, are prototyped
macname2.h //
However, the Winwlm.h file excludes many symbols if certain native
Macintosh header files are not previously included. For example,
GetWrapperWindow is defined if MACOS\Windows.h is included beforehand. This
behavior occurs because GetWrapperWindow, along with other symbols, is in a
section dependent upon __WINDOWS__ being defined. MACOS\Windows.h defines
__WINDOWS__ .
Below is a list of some of the more commonly-used symbols and the
required header file. The header file must be included before Winwlm.h or
Afxwin.h and surrounded by the inclusion Macname1.h and Macname2.h. For
example:
Symbol Include
------ ----------------
CFragConnectionID macos/codefrag.h //__CODEFRAGMENTS__
CFragInitBlockPtr
WlmInit
WlmTerm
WrapInstance
UnwrapInstance
GetMacInstanceInformation
MenuRef macos/menus.h //__MENUS__
WlmInitEx
CheckoutMenu
WrapMenu
UnwrapMenu
UpdateMenuBar
WindowRef macos/windows.h //__WINDOWS__
ActivateForeignWindow
GetWindowWrapper
GetWrapperWindow
GetWrapperContainerWindow
WrapWindow
WrapWindowMinimal
UnwrapWindow
DialogRef macos/dialogs.h //__DIALOGS__
AfxGetNextEvent macos/events.h //__EVENTS__
AfxWaitNextEvent
AfxEventAvail
AfxGetOSEvent
AfxOSEventAvail
GrafPortToClient macos/types.h //__TYPES__
If these header files are not included, the following error messages are
generated:
error C2065: 'GetWrapperWindow' : undeclared identifier
error C2064: term does not evaluate to a function
If the following errors occur after including these headers
warning C4003: not enough actual parameters for macro 'GetItem'
error C2059: syntax error : ','
warning C4003: not enough actual parameters for macro 'SetItem'
error C2059: syntax error : ','
...
it is because the Afxcmn.h header file was included later. The Afxcmn.h
header file contains GetItem and SetItem member functions of several MFC
classes that conflict with the ones defined in MACOS\Menus.h. For example:
// macos/Menus.h
#if OLDROUTINENAMES
...
#define SetItem(theMenu, item, itemString) SetMenuItemText(theMenu,
item, itemString)
#define GetItem(theMenu, item, itemString) GetMenuItemText(theMenu,
item, itemString)
...
#endif // OLDROUTINENAMES
The workaround is to define OLDROUTINENAMES as 0. Below is an example
of a typical MFC project's Stdafx.h file. This project uses the common
controls. For example:
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <macname1.h>
#define OLDROUTINENAMES 0
#include <macos/windows.h>
#include <macname2.h>
#include <afxwin.h> // includes Winwlm.h
#include <afxext.h>
#include <afxcmn.h>
REFERENCES
Books Online
(c) Microsoft Corporation 1997, All Rights Reserved.
Contributions by Adam Kim, Microsoft Corporation
Modification Type: | Major | Last Reviewed: | 10/2/2003 |
---|
Keywords: | kberrmsg kbprb KB176487 |
---|
|