【发布时间】:2021-03-03 20:52:05
【问题描述】:
我已经能够解耦我的代码,以便编译器认为应用程序中没有使用类,即使它们是。 我有一个根据属性注册类的机制。
目前我已经通过使用类定义引用单元中的类来解决这个问题,如下所示:
interface
uses
uISomeService;
type
[ServiceName('FooBar')]
[LicenseKey('LIC42')]
TSomeService1 = class(TInterfacedObject, ISomeService)
...
end;
...
...
implementation
...
procedure Donothing(AClass: Tclass);
begin
// Do nothing
end;
initialization
Donothing(TSomeService1);
有没有办法告诉编译器“在二进制文件中包含这个类,即使你认为它没有被使用”类似于{$NoClassOpti + }?我不喜欢在初始化中使用过程调用。
【问题讨论】:
-
见this。只有一个global setting,不是每个班级。
-
谢谢@Olivier,这实际上是我的问题,几乎完全一样。嗯,我确实喜欢 {$STRONGLINKTYPES ON} 指令,但我不喜欢将它添加到 .dpr 中的想法。无论如何,感谢您的链接,非常感谢。
-
我总是通过在其实现部分中有一个带有单个空函数
procedure IncludeClasses(const Classes: array of TMyBaseClass);(或特定于应用程序的命名约定)的单元和一个IncludeClasses([TMyClass1, TMyClass2, ...])来解决这个问题,每个单元的格式很好行,在initialization部分。当然,实现部分的uses子句将包含相关单元。我更喜欢这种方法,因为它感觉语义化; “什么都不做”虽然在技术上是正确的,但感觉不对。 -
@Olivier,似乎无法将您的评论标记为解决方案。也许如果你把它作为一个答案?
标签: delphi compiler-optimization rtti