MFC:重写附属 DLL 中 RC 文件中的位图路径

MFC: Overriding a bitmap path in RC file in satellite DLL

本文关键字:文件 位图 路径 RC MFC 重写 附属 DLL      更新时间:2023-10-16

我有一个使用以下RC文件的主要可执行文件:

  • main.rc
  • bitmaps.rc

main.rc#include bitmaps.rc.

我希望位图(和其他资源)在运行时是可交换的,因此我决定使用 DLL 方法并使用AfxSetResourceHandle交换资源。

我目前的方法: 在卫星DLL项目中,它的RC文件将简单地执行一个#include main.rc,首先从主可执行文件中获取所有资源。 然后,我使用以下方法替换特定的位图(只有少数需要更改的位图):

#undef IDB_ICON
IDB_ICON    BITMAP    "..\newIcon.bmp"
#undef IDB_ABOUT
IDB_ABOUT   BITMAP    "..\newAbout.bmp"

#undef使其编译而不会喷出"重复资源"错误。 但是,替换在运行时不起作用。

我能让它工作的唯一方法是复制bitmaps.rc卫星项目中的bitmapsSatellite.rc,然后进行少量路径交换。当然,根据项目的不同,main.rc调整为仅包含一个位图rc文件。

我想要的方法将是更干净和不言自明的。 有没有办法让它工作,也许使用#undef以外的东西?

无需取消定义资源 ID。

一个资源文件中可能存在具有相同 ID 的资源,这些资源可能具有不同的语言 ID。

要将它们分开,很容易使用命令行设置编译 RC 文件,该命令行设置预制AFX_RESOURCE_DLL.

当为资源编译器定义AFX_RESOURCE_DLL时,它仅包括也在命令行上定义的语言的资源,如AFX_TARG_ENUAFX_TARG_DEU

对于可能始终包含在 satelaite DLL 中的资源,我使用AFX_TARG_NEUD(中性资源)。

因此,您可能将所有资源都放在一个文件中,或者您可能将资源吐到多个 RC 文件中。您可以通过#include语句将所有需要的资源文件包含在一个编译过程中,并通过命令行定义选择所需的目标语言。