Microsoft KB Archive/129953

{|
 * width="100%"|

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

 * }

Q129953

-

The information in this article applies to:


 * Microsoft Platform Software Development Kit (SDK), on platform(s):
 * Microsoft Windows NT Server version 3.5
 * Microsoft Windows NT Workstation version 3.5
 * Microsoft Visual C++, versions 2.0, 2.1

-

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.

Additional query words: 3.10 2.00 2.10 CString port porting VfWDK

Keywords :

Issue type :

Technology : kbWin32SDKSearch kbAudDeveloper kbSDKSearch