Help and Support
 

powered byLive Search

You receive an "RC2151 Cannot re-use string constants" error message when you try to add a string resource to an application in Visual C++

Article ID:194299
Last Review:November 21, 2006
Revision:3.1
This article was previously published under Q194299
On This Page

SYMPTOMS

Adding a string resource to an application that uses MFC as a static link library may result in the use of the same ID value twice in a STRINGTABLE statement. The Resource Compiler generates the following error:
RC2151 Cannot re-use string constants
This problem is likely to happen when using the resource editor to add the string.

Back to the top

CAUSE

When using MFC as a static library in an application, MFC's resources are compiled into the .exe.

The statement on line 26 of Afxres.rc
   #ifndef _AFXDLL
				
causes string resources defined in Afxres.h to be used in the application when building Afxres.rc. If an ID value of another string resource matches any of the ID values used in Afxres.rc, the same ID value is used twice in a STRINGTABLE statement.

NOTE: The problem is not multiple definitions of the ID symbol, but rather, the use of the definition multiple times in a string table.

Back to the top

RESOLUTION

Consult both Technical Note 20 "ID Naming and Numbering Conventions" and the file Afxres.h to help locate ID values used by Windows or MFC. Then remove any entries in the string table that use ID values more than once (for example, an entry in the application's string table that has a ID value matching an ID value in Afxres.h).

Back to the top

STATUS

This behavior is by design.

Back to the top

MORE INFORMATION

Technical Note 20 "ID Naming and Numbering Conventions" lists many of the ID ranges used for specific purposes. However, this article does not mention the possible conflict with the IDs defined in Afxres.h.

Back to the top

Steps to Reproduce Behavior

1.Create a new SDI or MDI application using AppWizard that use MFC as a static library.
2.Add a String resource using the Resource Editor; it will have the ID IDS_STRING61446, which has the value 61446 (0xF006).
3.Build the application.
When building the application, the following error message is generated:
error RC2151 : cannot reuse string constants, 61446(0xF006)
This error is generated because AFX_IDS_UNNAMED_FILE is defined with the value of 0xF006 in Afxres.h and is used in both the Afxres.rc file and the application's .rc file.

Back to the top

REFERENCES

For more information, click the following article number to view the article in the Microsoft Knowledge Base:
21569 (http://support.microsoft.com/kb/21569/) RW2002 Error "Cannot Reuse String Constants" in RC.EXE
(c) Microsoft Corporation 1998, All Rights Reserved. Contributions by Isaac Varon, Microsoft Corporation

Back to the top


APPLIES TO
Microsoft Foundation Class Library 4.2, when used with:
  Microsoft Visual C++ 4.0 Standard Edition
  Microsoft Visual C++ 4.1 Subscription
  Microsoft Visual C++ 4.2 Professional Edition
  Microsoft Visual C++ 4.2 Enterprise Edition
  Microsoft Visual C++ 4.2 Professional Edition
  Microsoft Visual C++ 5.0 Enterprise Edition
  Microsoft Visual C++ 5.0 Professional Edition
  Microsoft Visual C++ 6.0 Enterprise Edition
  Microsoft Visual C++ 6.0 Professional Edition
  Microsoft Visual C++, 32-bit Learning Edition 6.0

Back to the top

Keywords: 
kberrmsg kbtshoot kbresource kbstring kbprb KB194299

Back to the top

Article Translations

 

Other Support Options

  • Need More Help?
    Contact a Support professional by E-mail, Online or Phone.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.