Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Delphi在exe/dll中添加和使用多个资源文件*.RES_Windows_Delphi - Fatal编程技术网

Windows Delphi在exe/dll中添加和使用多个资源文件*.RES

Windows Delphi在exe/dll中添加和使用多个资源文件*.RES,windows,delphi,Windows,Delphi,我对在delphi中使用*.RES文件有疑问 e、 我有两个资源文件:1.RES和2.RES。这两个RES文件都包含称为IMAGE1(jpg)的不同图像 我使用以下命令将RES文件添加到Delphi应用程序: {$R '1.RES'} {$R '2.RES'} 如何指定要使用的资源文件? 如果我只有一个RES文件,我想检索图像时使用以下命令: var RS : TResourceStream; jpg : TjpegImage; RS := TResourceStream.Creat

我对在delphi中使用*.RES文件有疑问

e、 我有两个资源文件:1.RES和2.RES。这两个RES文件都包含称为IMAGE1(jpg)的不同图像

我使用以下命令将RES文件添加到Delphi应用程序:

{$R '1.RES'}
{$R '2.RES'}
如何指定要使用的资源文件? 如果我只有一个RES文件,我想检索图像时使用以下命令:

var RS : TResourceStream;
    jpg : TjpegImage;

RS := TResourceStream.Create(HInstance,'IMAGE1',RT_RCDATA);
jpg.LoadFromStream(RS);
现在,如果我有2个RES文件,我怎么知道它将加载什么?
我认为我需要控制HInstance,但我无法理解如何控制。

给定模块中的资源名称必须是唯一的,就像函数中的变量必须有唯一的名称一样,目录中的文件必须有唯一的名称等等。因此,如果您将两个同名的资源放入同一个模块中,一个资源将被丢弃,您将只能检索剩余的资源

如果你不清楚模块是什么,我会尽力解释。模块是DLL、可执行文件或Delphi包。您的可执行文件是单个模块,具有单个实例句柄。它链接到DLL,每个DLL都是独立的模块。可执行文件加载的任何包也是不同的模块。您可以在其他模块中拥有与可执行文件中的资源同名的资源

我想我需要控制自己的立场,但我无法掌握如何控制

我希望你现在能理解这一点。值
HInstance
标识模块,在代码中它指与可执行文件关联的模块

您的选择:

  • 为资源指定不同的名称
  • 将资源放入不同的模块中

  • 所以我必须制作更多的DLL。感谢您的快速回答:)或使用不同的名称。这就是我要做的。因为你用
    exe
    dll
    标记了你的问题,我假设你在exe中有一个资源,在dll中有另一个?在这种情况下,是的,模块的
    HInstance
    就是“答案”。@a两个相邻的
    $R
    语句表明,在这种情况下,链接器传递不应该产生关于“重复资源”的错误消息吗?