PRB: #import "shdocvw.dll" / tagREADYSTATE compile errors (169433)
The information in this article applies to:
- Microsoft Internet Explorer (Programming) 4.0
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
This article was previously published under Q169433 SYMPTOMS
When using the #import compiler directive to import Shdocvw.dll, several
errors similar to the following will be reported:
error C2556: 'GetReadyState' : overloaded functions
only differ by return type
error C2371: 'GetReadyState' : redefinition;
different basic types
error C2664: 'get_ReadyState' : cannot convert
parameter 1 from 'enum SHDocVw::tagREADYSTATE *' to 'enum tagREADYSTATE
*'
When using the #import compiler directive with the no_namespace attribute
to import Shdocvw.dll, several errors similar to the following will be
reported:
error C2011: 'tagREADYSTATE' :
'enum' type redefinition
error C2871: 'SHDocVw' : does not
exist or is not a namespace
CAUSE
These errors are generated because of the inclusion of the tagReadyState
definition in Ocidl.idl (included by the .idl for shdocvw).
Including tagReadyState in Ocidl.idl causes tagReadyState to be included in
the type library for Shdocvw.dll. In turn, #import "shdocvw.dll" includes
the definition of tagReadyState in the generated headers for Shdocvw.dll.
This definition collides with the definition of tagReadyState in Ocidl.h.
RESOLUTION
The exclude attribute of the #import directive can be used to work around
this problem.
Use #import shdocvw.dll as follows:
#import <shdocvw.dll> exclude("tagREADYSTATE")
The tagReadyState will be defined for your project through the inclusion of
Ocidl.h.
STATUS
This behavior is by design.
REFERENCES
Visual C++ Preprocessor Reference: The #import directive
Modification Type: | Major | Last Reviewed: | 7/18/2001 |
---|
Keywords: | kbDSupport kberrmsg kbFAQ kbprb kbWebBrowser KB169433 |
---|
|