[英]DWScript: passing a set-of-enumerated-type will pass an array of integer
[英]Prevent debug information for array of enumerated type from appearing in EXE
我打开 Delphi IDE 并创建一个新项目。 这是应用程序的完整代码:
program EnumSymbolsInExeTest1;
type
tMyEnum = ( A );
begin
end.
我构建了应用程序,然后在 EXE 中搜索“ tMyEnum
”。 找到了。 这并不奇怪,因为我在链接器选项中设置了调试信息。
我关闭调试信息。 我重建。 我再次搜索 EXE,现在没有提到tMyEnum
。 到目前为止,一切都如预期的那样。
然后我更改代码。 我添加了一个变量。
program EnumSymbolsInExeTest1;
type
tMyEnum = ( A );
var
Z : tMyEnum;
begin
end.
我重建。 仍然没有惊喜。 我得到一个未使用变量的提示,但 EXE 仍然没有提到TMyEnum
。
然后我再做一个小改动:
type
tMyEnum = ( A );
var
Z : array of tMyEnum;
begin
end.
我将变量更改为数组。 我重建。 我搜索了 EXE,发现“ tMyEnum
”现在出现在 EXE 文件中。
我的问题是:为什么?
我怎样才能阻止它? 我不希望我的任何内部标识符出现在我发送给客户的可执行文件中。
我正在使用 Delphi 10.2
为了回应 David Heffernan,我添加了这些编译器指令。
program EnumSymbolsInExeTest1;
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
type
tMyEnum = ( A );
var
Z : array of tMyEnum;
begin
end.
我的 EXE 仍然包含“tMyEnum”。
我有新线索! 我将数组从动态更改为静态。
program EnumSymbolsInExeTest1;
type
tMyEnum = ( A );
var
Z : array [1..10] of tMyEnum;
begin
end.
现在标识符不再出现在 EXE 中。
因此类型的声明不会触发它,添加该类型的变量不会触发它,添加静态数组不会触发它,但使其成为动态数组会。
我会说这是不可能的。
直接实验观察的结论
尝试关闭我们可以找到的所有选项:
编译
链接
并且该符号仍然出现在最终 PE 模块的.text
部分中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.