我打开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,发现EXE文件中现在显示“ tMyEnum
”。
我的问题是:为什么?
该如何阻止它?我不希望任何内部标识符出现在发送给客户的可执行文件中。
我正在使用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中。
因此,类型的声明不会触发它,添加该类型的变量不会触发它,添加静态数组不会触发它,但是使它成为动态数组会