错误 RC2255:不允许使用命名的 STRINGTABLE - 生成日文 RES 文件时发生
error RC2255: named STRINGTABLEs are not allowed - occurs when generating a Japanese RES file
我有一个包含多个 .RC 文件的静态库,每个文件对应一种特定语言。在大多数情况下(英语、法语),项目在 Visual Studio 中构建良好(即生成 .RES 文件)。关于我制作的 en-GB.RC 文件,请参见下文:
#pragma once
#include <windows.h>
#include "resource.h"
/* Exceptions */
STRINGTABLE
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
{
IDS_EXCEPTION_MESSAGE_ARGUMENT, "Value is invalid."
IDS_EXCEPTION_MESSAGE_ARGUMENT_NAMED, "'%s' value is invalid."
IDS_EXCEPTION_MESSAGE_ARGUMENTOUTOFRANGE, "Value is outside of acceptable range."
IDS_EXCEPTION_MESSAGE_ARGUMENTOUTOFRANGE_NAMED, "'%s' value is outside of \
acceptable range."
IDS_EXCEPTION_MESSAGE_EXCEPTION, "Exception of type '%s' was thrown."
IDS_EXCEPTION_MESSAGE_FILENOTFOUND, "Unable to find the specified file."
IDS_EXCEPTION_MESSAGE_FILENOTFOUND_NAMED, "Unable to find '%s'."
IDS_EXCEPTION_MESSAGE_IO, "I/O error occurred."
}
当我尝试创建 ja-JP.RC 文件时遇到了几个问题。首先,我被要求将文件另存为 "unicode" - 当我通过另存为检查文件编码时,它使用代码页 65001(带签名的 Unicode UTF8)。如果我不使用此代码页,则会收到有关可能丢失数据的警报。
第二个问题是文件没有编译。我收到以下错误:
错误 RC2255:不允许使用命名的 STRINGTABLE
这是我的 ja-JP.RC 文件:
#pragma once
#include <windows.h>
#include "resource.h"
/* Exceptions */
STRINGTABLE
LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN
{
IDS_EXCEPTION_MESSAGE_ARGUMENT, "値が無効です。"
IDS_EXCEPTION_MESSAGE_ARGUMENT_NAMED, "「%s」値が無効です。"
IDS_EXCEPTION_MESSAGE_ARGUMENTOUTOFRANGE, "値が許容範囲の外にある。"
IDS_EXCEPTION_MESSAGE_ARGUMENTOUTOFRANGE_NAMED, "「%s」値が許容範囲の外にある。"
IDS_EXCEPTION_MESSAGE_EXCEPTION, "種類「%s」の例外がスローされました。"
IDS_EXCEPTION_MESSAGE_FILENOTFOUND, "指定されたファイルが見つかりません。"
IDS_EXCEPTION_MESSAGE_FILENOTFOUND_NAMED, "「%s」を見つけることができません。"
IDS_EXCEPTION_MESSAGE_IO, "入力/出力エラーが発生しました。"
}
正如您在一些日文字符串中看到的那样,我使用 %s 来传递参数。
我应该如何生成 "ja-JP" 兼容的 RES 文件?
it uses Codepage 65001 (Unicode UTF8 with signatures)
我应该在 post 中记录此事故,错误消息令人困惑,足以让任何人在他们的生活中使用两个小时。 Rc.exe 是一个过时的 Windows SDK 工具,它没有跟上时代的步伐,可能已经过了它仍然可以维护的阶段。我得到的第一个版本是 v1.1,日期是 1985 年 4 月 17 日。它很快就要庆祝它的 30 岁生日了:)
它无法正确解析 utf-8 编码的文件。这 通常 给出关于无法找到文件的混杂错误,error RC2135, file not found
是典型的。你发现了另一种失败模式,"named STRINGTABLEs are not allowed" 并没有给出一个很好的问题提示:)
您必须将其保存为 utf-16 编码文件,Windows 内部对字符串使用的编码。从“另存为”对话框中选择 Unicode(代码页 1200),单击“保存”按钮上的箭头 select。
我有一个包含多个 .RC 文件的静态库,每个文件对应一种特定语言。在大多数情况下(英语、法语),项目在 Visual Studio 中构建良好(即生成 .RES 文件)。关于我制作的 en-GB.RC 文件,请参见下文:
#pragma once
#include <windows.h>
#include "resource.h"
/* Exceptions */
STRINGTABLE
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
{
IDS_EXCEPTION_MESSAGE_ARGUMENT, "Value is invalid."
IDS_EXCEPTION_MESSAGE_ARGUMENT_NAMED, "'%s' value is invalid."
IDS_EXCEPTION_MESSAGE_ARGUMENTOUTOFRANGE, "Value is outside of acceptable range."
IDS_EXCEPTION_MESSAGE_ARGUMENTOUTOFRANGE_NAMED, "'%s' value is outside of \
acceptable range."
IDS_EXCEPTION_MESSAGE_EXCEPTION, "Exception of type '%s' was thrown."
IDS_EXCEPTION_MESSAGE_FILENOTFOUND, "Unable to find the specified file."
IDS_EXCEPTION_MESSAGE_FILENOTFOUND_NAMED, "Unable to find '%s'."
IDS_EXCEPTION_MESSAGE_IO, "I/O error occurred."
}
当我尝试创建 ja-JP.RC 文件时遇到了几个问题。首先,我被要求将文件另存为 "unicode" - 当我通过另存为检查文件编码时,它使用代码页 65001(带签名的 Unicode UTF8)。如果我不使用此代码页,则会收到有关可能丢失数据的警报。
第二个问题是文件没有编译。我收到以下错误:
错误 RC2255:不允许使用命名的 STRINGTABLE
这是我的 ja-JP.RC 文件:
#pragma once
#include <windows.h>
#include "resource.h"
/* Exceptions */
STRINGTABLE
LANGUAGE LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN
{
IDS_EXCEPTION_MESSAGE_ARGUMENT, "値が無効です。"
IDS_EXCEPTION_MESSAGE_ARGUMENT_NAMED, "「%s」値が無効です。"
IDS_EXCEPTION_MESSAGE_ARGUMENTOUTOFRANGE, "値が許容範囲の外にある。"
IDS_EXCEPTION_MESSAGE_ARGUMENTOUTOFRANGE_NAMED, "「%s」値が許容範囲の外にある。"
IDS_EXCEPTION_MESSAGE_EXCEPTION, "種類「%s」の例外がスローされました。"
IDS_EXCEPTION_MESSAGE_FILENOTFOUND, "指定されたファイルが見つかりません。"
IDS_EXCEPTION_MESSAGE_FILENOTFOUND_NAMED, "「%s」を見つけることができません。"
IDS_EXCEPTION_MESSAGE_IO, "入力/出力エラーが発生しました。"
}
正如您在一些日文字符串中看到的那样,我使用 %s 来传递参数。
我应该如何生成 "ja-JP" 兼容的 RES 文件?
it uses Codepage 65001 (Unicode UTF8 with signatures)
我应该在 post 中记录此事故,错误消息令人困惑,足以让任何人在他们的生活中使用两个小时。 Rc.exe 是一个过时的 Windows SDK 工具,它没有跟上时代的步伐,可能已经过了它仍然可以维护的阶段。我得到的第一个版本是 v1.1,日期是 1985 年 4 月 17 日。它很快就要庆祝它的 30 岁生日了:)
它无法正确解析 utf-8 编码的文件。这 通常 给出关于无法找到文件的混杂错误,error RC2135, file not found
是典型的。你发现了另一种失败模式,"named STRINGTABLEs are not allowed" 并没有给出一个很好的问题提示:)
您必须将其保存为 utf-16 编码文件,Windows 内部对字符串使用的编码。从“另存为”对话框中选择 Unicode(代码页 1200),单击“保存”按钮上的箭头 select。