为什么字符串表在 .rc 文件中被分成多个部分?

问题描述 投票:0回答:1

在 .rc 文件中,字符串按最多 16 个字符串的部分进行分组。

因此,在典型的 .rc 文件中,我们通常有这样的内容:

...
STRINGTABLE  // section 1
BEGIN
    IDS_SOMEID_1    "Some text 1"
    IDS_SOMEID_2    "Some text 1"
    IDS_SOMEID_3    "Some text 3"
END

STRINGTABLE  // section 2
BEGIN
    IDS_SOMEID_4    "Some text 4"
    IDS_SOMEID_5    "Some text 5"
    IDS_SOMEID_6    "Some text 6"
END
...

且某一节中字符串的 ID 仅相差至少 4 位。

我想知道为什么需要在 .rc 文件中明确指定这些部分。资源编译器可以完全处理这个问题,因此我们可以为每个 .rc 文件部分拥有一个字符串表,如下所示:

STRINGTABLE
BEGIN
    IDS_SOMEID_1    "Some text 1"
    IDS_SOMEID_2    "Some text 1"
    IDS_SOMEID_3    "Some text 3"
    IDS_SOMEID_4    "Some text 4"
    IDS_SOMEID_5    "Some text 5"
    IDS_SOMEID_6    "Some text 6"
END

有没有人给个合理的解释?

我在这里找到了一些(不充分的)解释:

windows winapi
1个回答
0
投票

我不知道这个发明最初的深层原因。也许是分配大小的问题。请记住 RC 文件是在 Windows 早期发明的。

但是STRINGTABLE的文档说:

RC 为每个部分分配 16 个字符串,并使用标识符值来确定哪个部分包含该字符串。标识符仅在底部 4 位不同的字符串放置在同一部分中。

Raymond Chen 将其命名为字符串“捆绑”:https://devblogs.microsoft.com/oldnewthing/20040130-00/?p=40813

© www.soinside.com 2019 - 2024. All rights reserved.