PRB: C2371 BSTR Redefinition When VFW.H Included in MFC App (129953)



The information in this article applies to:

  • Microsoft Platform Software Development Kit (SDK) 1.0, when used with:
    • Microsoft Windows NT Server 3.5
    • Microsoft Windows NT Workstation 3.5
  • Microsoft Visual C++ 2.0
  • Microsoft Visual C++ 2.1

This article was previously published under Q129953

SYMPTOMS

The following error message occurs when compiling an application with Microsoft Visual C++, version 2.0 or 2.1, which uses the Microsoft Video for Windows header file, VFW.H, and the Microsoft Foundation Classes (MFC):
c:\msvc20\include\oleauto.h(214) : error C2371: 'BSTR' : redefinition; different basic types
This error message does not occur when using Microsoft Visual C++ version 1.5 for Windows with the Microsoft Video for Windows 1.1 DK installed while running under Microsoft Windows operating system version 3.1.

RESOLUTION

If the application does not require binary string (BSTR) support you can eliminate this error message by defining "_AFX_NO_BSTR_SUPPORT" before the MFC include files. For example, place the code below at the beginning of the STDAFX.H file:
   #define _AFX_NO_BSTR_SUPPORT
				
If the application does require BSTR support, then you can eliminate this error message by including the code below before including the VFW.H file:
   #define OLE2ANSI
				

MORE INFORMATION

This error message occurs by design. MFC versions 3.0 and 3.1 require either that "OLE2ANSI" is defined when including the object linking and embedding (OLE) headers or that "_AFX_NO_BSTR_SUPPORT" is defined. You cannot use both ANSI-BSTRs (which is the default) and Unicode-BSTRs; you must use one or the other.

The AFX.H file defines the BSTR type in order to allow CStrings to support BSTRs. The VFW.H file unconditionally includes the OLE2.H file, which eventually includes the OLEAUTO.H file, which also defines the BSTR type. "_AFX_NO_BSTR_SUPPORT" disables CString support for BSTRs.

Steps to Reproduce Problem

  1. Generate a default application with AppWizard.
  2. Add the statement "#include vfw.h" to the end of the STDAFX.H file.
  3. Compile the application.
The VFW.H file is included with the Microsoft Visual C++, 32-bit Edition, and the Microsoft Win32 SDK for Windows NT.

Modification Type:MinorLast Reviewed:7/11/2005
Keywords:KB129953