RC.exe命令行将.rc文件编译为.res文件,解决error RC2144 : PRIMARY LANGUAGE ID not a number报错

RC.exe

  • 此程序为windows sdk中将 .rc 资源文件打包为 .res 文件的系统工具
  • 一篇1999年的介绍该工具使用方法的文章
  • 注意RC.exe 程序依赖于rcdll.dll和部分系统库,单独拷贝使用时需要 rcdll.dll
  • 重点:
  • 形如如下格式的rc文件:
STRINGTABLE
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
{
  103, 	"hello"
  104, 	"world"
}
  • 如果直接执行命令 (/r 以及 /fo 的含义可以使用 rc.exe /? 来获取参数列表的含义 或者参见官方文档 using-rc-the-rc-command-line-)
rc.exe /r /fo testA.res .\testA.rc
  • 将会出现报错:
Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384
Copyright (C) Microsoft Corporation.  All rights reserved.


.\testA.rc(2) : error RC2144 : PRIMARY LANGUAGE ID not a number

.\testA.rc(2) : error RC2105 : BEGIN expected in string table
出现error原因
  • testA.rc 文件中使用了 LANG_CHINESE 与 SUBLANG_CHINESE_SIMPLIFIED 这两个宏,未十六进制id,所以导致编译错误,如果是在工程中可以考虑引入头文件 #include <windows.h> 来解决;
  • 如果是仅使用命令行编译 例子中的 testA.rc ,可以考虑将宏替换为16进制的数字即可解决:
STRINGTABLE
LANGUAGE 0x04, 0x02
{
  103, 	"hello"
  104, 	"world"
}
  • 宏与十六进制对应关系可以在 winnt.h 头文件中找到:
#define LANG_CHINESE                     0x04   // Use with SUBLANG_CHINESE_* Sublanguage IDs
#define LANG_CHINESE_SIMPLIFIED          0x04   // Use with the ConvertDefaultLocale function
#define LANG_CHINESE_TRADITIONAL       0x7c04   // Use with the ConvertDefaultLocale function

#define SUBLANG_CHINESE_TRADITIONAL                 0x01    // Chinese (Taiwan) 0x0404 zh-TW
#define SUBLANG_CHINESE_SIMPLIFIED                  0x02    // Chinese (PR China) 0x0804 zh-CN
#define SUBLANG_CHINESE_HONGKONG                    0x03    // Chinese (Hong Kong S.A.R., P.R.C.) 0x0c04 zh-HK
#define SUBLANG_CHINESE_SINGAPORE                   0x04    // Chinese (Singapore) 0x1004 zh-SG
#define SUBLANG_CHINESE_MACAU                       0x05    // Chinese (Macau S.A.R.) 0x1404 zh-MO
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值