Delphi将DLL嵌入到可执行文件中而不使用资源

时间:2015-11-30 17:10:44

标签: delphi dll

我想做到这一点: embed DLL into EXE 但不使用资源(DLL二进制文件不应该在资源查看器中可见,而是隐藏在可执行代码中)。 我试图将文件转换为字符串文字,但文件太大,我只是在尝试编译它时出现内存或堆栈溢出异常:

const cFileSize = 2424564;
const cFileBlock =
'30820274020100300D06092A864886F70D010101'+
'05000482025E3082025A02010002818100D713B2'+
...
'BF1F8167F517D3945C27CABCB1E7D7C4092336B9';

你有什么建议:

a)尝试一些方法来满足编译器内存限制(比如分成更多包含文件等)?

b)将DLL转换为目标文件并将其与应用程序(哪个工具?)

链接

c)其他一些方式?

谢谢

2 个答案:

答案 0 :(得分:0)

我可以确认上述评论中提出的解决方案有效:

const cFileBlock: array[0..2424564-1] of byte = ($30, $82, ..., $B9);

编译器不再抱怨堆栈溢出和内存不足错误。

但是我无论如何都不会使用此解决方案,因为防病毒软件可能会出现虚假威胁警告,请再次参阅上述评论。

谢谢大家的帮助。

答案 1 :(得分:0)

为什么不使用CRC校验和?

如果您的目标是确保DLL没有以任何方式被篡改,您可以在程序中存储CRC,该CRC是从已知的未经过篡改的DLL计算的。然后,只需读入DLL并将计算出的DLL的校验和与您存储的内容进行比较。

需要注意的一件事是,如果生成DLL的人/公司进行更改,则会产生不同的校验和,并且此更新的校验和将需要存储在您的应用程序中,否则程序将“相信”如果使用更新版本,则DLL已被篡改。