2010-03-26 80 views
0

由于某种原因,我的dll已经比早期大了很多倍。我正在开始规划这种情况:如何再次减小dll的大小

  1. 来源未发生变化。
  2. 调试信息无处不在。
  3. Dll使用软件包“软件包”,但不包含在运行时软件包选项中。
  4. 我比较了新的DLL与旧版本的DLL认为PE探索的工具。在新的DLL中,我发现很多模块的前缀'ec'隐式地导入,不像老的dll。
  5. 使用ecControls组件打包“Pack”
  6. Dll不使用显式调用ecControls单位。

为什么在dll中导入ecControls单元?有没有人提供一些建议?

+0

如果源文件没有改变,那么为什么要重建dll的原因? – skamradt 2010-03-26 17:50:55

+0

DLL的来源,但包“包”的来源可能chahged。 – 2010-03-26 18:06:02

回答

1

如果您的DLL使用的是未包含在运行时软件包列表中的软件包,则其单元将隐式地导入到您的DLL中,而不是链接到运行时软件包。这可能是什么原因造成的。尝试将软件包添加到运行时软件包列表中,并查看ecControls问题是否消失。

2

如果意外地使用了ecControls中的一个单元,它将会调用它的初始化部分(如果它有一个),并且可以在其中放置一个断点以尝试查看它从哪里调用。您也可以在System.InitUnits中放置一个断点(debug dcus on),以查看ecControls中的任何单元是否正在初始化。

我在Forms.pas中使用这种技术时,在dll上工作以确保Forms.pas不会意外链接。

+0

真棒小费。初始化部分经常被忽略,我从来没有想过如何利用它。 – 2010-03-26 20:27:20

1

为什么你不只是重命名ecControls目录并重建(当然首先删除包)? 这将让你确切地看到它被引用的地方。