2009-09-18 60 views
2

当我尝试链接DLL中的资源时,出现以下错误。E2161错误:RLINK32:要处理的资源太多。德尔福错误

[DCC错误] E2161错误:RLINK32:要处理的资源太多。

资源数量大于10K。

我不确定,如果有一个DLL中的资源名称的大小有任何限制。 https://forums.codegear.com/message.jspa?messageID=58473

有什么办法可以向dll添加更多资源。

-Pavan。

+0

什么版本的Delphi?什么样的资源? – zendar 2009-09-18 09:10:00

+0

Delphi 2009和PNG图像 – Pavan 2009-09-18 09:10:37

+0

他们有什么必要成为资源的原因吗?或者它们可能位于外部文件中并在运行时加载? – skamradt 2009-09-18 16:01:57

回答

4

作为一种解决方法,您可以在单个图像中将相关图像合并在一起,然后在运行时切出所需的部分。例如,这就是Windows图像列表控件的工作方式。

+0

我同意罗布,如果你必须让他们作为资源。 – skamradt 2009-09-18 15:58:35

0

我自己没有遇到这个错误,但是如果我这样做了,我想我会尝试的第一件事就是将我的资源分割成单独的RES文件。

这可能是因为“太多”太多了,并且跨多个res文件分割资源可能会把事情分解成RLINK32需要处理的更易于管理的块。

但是这只是我的猜测而已。

+0

我曾试过这个。分割成多个RES文件不起作用。 – Pavan 2009-09-18 10:00:46

1

将资源拆分成不同的DLL或选择一些容器来存储文件(例如一些嵌入式数据库,如SQL Lite,Eldos SoLFS存储,AidAim单一文件系统存储或您自己的实现),可以在末尾附加可执行文件(如果可能的话)(因为您使用Delphi 2009,您可以使用Post-Build命令来执行此操作)。如果你选择第二种方式,你的程序将使用更少的内存,因为资源部分会更小,同样也取决于实现,你也可以使用加密来保护图像,甚至压缩它们。只有减号是你将不得不创建自定义加载过程来加载png数据到你的对象中(不是太难)。

0

从没有代码更改到更多的修改:
1.尽量缩短你的资源的名称
2.分割你的DLL到多个的较小的编号资源(自然或主题来组织他们的好方法)
3.将您的图像资源,为多图像条(行之有效的图标,字形,等等......当大小是一样的)

1

PngComponents有分量TPngImageCollection。也许这会为你做。