PRB: Error C2787 When Building a Project Using ATL 3.0 (192561)
The information in this article applies to:
- The Microsoft Active Template Library (ATL) 3.0, when used with:
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
This article was previously published under Q192561 SYMPTOMS
When building a project with ATL 3.0 you may get a compiler error c2787 (no
GUID has been associated with this object).
CAUSE
The newer versions of MIDL use the compiler facility [__declspec(uuid())]
to tag a GUID to an interface in the header files it generates. ATL version
3.0 makes use of this fact in the implementation of COM_INTERFACE_ENRY
macro; it now uses the keyword __uuidof() to extract the interface ID from
the MIDL-generated header. ATL 2.1 uses the token pasting operator
(IID_##IFoo) to get the interface ID. This action requires including the
MIDL-generated header and also the "project_i.c", which MIDL generated.
If you use an older MIDL-generated header file [which does not use
__declspec(uuid())] with ATL 3.0, you will get this compiler error, because
__uudiof() can't extract the interface ID.
RESOLUTION
Define the preprocessor symbol _ATL_NO_UUIDOF in the C/C++ tab of the
Project Settings dialog box. This forces ATL to use the token pasting
operator (##) rather than __uuidof() when forming the interface ID.
STATUS
This behavior is by design.
REFERENCES
"Porting from ATL 2.1" in the online help.
(c) Microsoft Corporation 1998, All Rights Reserved. Contributions by
Jaganathan Thangavelu, Microsoft Corporation.
Modification Type: | Major | Last Reviewed: | 12/10/2003 |
---|
Keywords: | kbMIDL kbprb KB192561 |
---|
|