windows - 在 Windows .rc 文件/dll 中使用字符串类型资源标识符

标签 windows winapi dll mfc

我们的代码库中有许多 MFC 扩展 dll,其中许多都嵌入了项目 .rc 文件中定义的 Windows 资源(IDS_...、IDD_...、IDB_... 等)。我们使用数字标识符来定义我们的资源,特别注意我们的资源 ID 不会在 dll 之间发生冲突,这需要进行一些管理以确保我们的开发人员不会使用相同的编号。

我意识到字符串类型资源标识符可能是一种简单的方法,这意味着我们可以为每个不同的 dll 中的每个资源定义唯一的标识符。

我的问题是,这样做是否存在任何技术问题,例如:

  • MFC dll/资源链是否仍能正常运行?
  • Visual Studio 资源编辑器仍然可以使用吗?

我在 MS 技术说明中没有发现任何内容表明这将是一个问题 - 我只是想知道人们是否有过这方面的经验。

最佳答案

但请注意,字符串表 (IDS_) 中字符串的 ID 必须是数字(16 位 IIRC)。字符串和其他资源之间的区别是由于字符串不是单独的资源。实际上,字符串表由一组资源组成,每个资源最多包含 16 个 ID 连续的字符串。

对话框中的控件 ID 也是如此。但您很可能知道这一点。

在资源编辑器中,您只需在资源名称两边加引号即可在属性网格中指定字符串资源 ID。

关于对话框和资源编辑器:您将遇到一个小问题:每当您为对话框创建一个类时,生成的代码都会包含 enum { IDD = resourceid }。不用说,它不适用于字符串 id。但是您可以轻松地摆脱此 IDD 枚举并将其替换为字符串。

关于windows - 在 Windows .rc 文件/dll 中使用字符串类型资源标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7443804/

相关文章:

c++ - 在 C++ 中枚举修饰的 DLL 函数

c++ - 如何在 C++ 中将 UTF-8 编码的字符串写入 Windows 中的文件

windows - 如何修复 ""Windows 无法访问指定的设备、路径或文件...。重新运行程序时?

winapi - gcc 将输入通过管道传输到其中时出现错误文件描述符错误

c++ - OpenGL 模板测试发生在片段程序运行之前还是之后?

c++ - 从 !DllRegisterServer+0x3ebfa 符号获取 C++ 函数名来解决 'endless wait in critical section' 难题

python - 如何让 Python 使用 Assembly

Windows 初始执行上下文

c# - 使用 p/invoke 和 win-api 监控音频线路输入 (C#)

c# - 是否有任何用于命名实体识别的 c# 库?