【问题标题】:How to prevent duplicated resource ID in different plugins?如何防止不同插件中重复的资源ID?
【发布时间】:2010-09-24 07:43:45
【问题描述】:

在 MFC C++ 中,当我们在 EXE 中添加新资源时,如字符串,它会自动生成一个 ID:

#define ID_SHOW_OUTPUT                 10313

当它有一个具有相似ID的插件(DLL)时,它会在触发后导致未定义的行为。

为了安全起见,我尝试定义自己的私人 ID:

#define ID_SHOW_OUTPUT          (WM_APP+6)

但是,如果 EXE 和 DLL 中有数百个资源,我将有很多工作。

我不确定对于跨可执行文件重复资源 ID 是否有更好的解决方案和预防措施???

【问题讨论】:

  • 你有什么问题?在不同的模块中有重复的资源 ID 是完全正常的。

标签: c++ mfc resources


【解决方案1】:
  • 检查this add-in。它使您可以更好地控制资源 ID。

  • 正如 Luke 所评论的,使用具有重复资源 ID 的 DLL 应该没有问题。使用AfxSetResourceHandle

  • 一次只有一个资源模块处于活动状态
  • 将命令 ID 设置为任意 UINT 值(在您的问题中,您将 WM_APP + 6 分配给命令 ID)是不安全的,因为 MFC 在许多地方都会解释这些值。查看this StackOverflow 问题了解更多详情。

【讨论】:

  • 推荐的 ResOrg 确实是一个很酷的工具。如果能在同一个进程中从exe和dll中加载多个Resource.h就完美了……你见过这种工具吗?
猜你喜欢
  • 1970-01-01
  • 2018-03-31
  • 2021-09-25
  • 2017-02-25
  • 2016-05-29
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
相关资源
最近更新 更多