kar*_*son 12 delphi dll rtti delphi-xe6
在Delphi XE6中编译DLL时,它会自动TMethodImplementationIntercept从中导出函数System.Rtti.pas.我试图找到一种方法来避免这种导出,但没有找到任何可以解决问题的配置或编译器指令.
System.Rtti单元几乎无法避免,因为它几乎被delphi中的所有内容间接使用.
在XE6中构建DLL时,有没有办法避免导出此函数?
System.Rtti单元中的代码如下所示:
{ This function has been added to be used from .s .c files in order to avoid use mangled names}
procedure TMethodImplementationIntercept(const obj:TMethodImplementation; AFrame: Pointer); cdecl;
begin
obj.Intercept(AFrame);
end;
exports TMethodImplementationIntercept;
Run Code Online (Sandbox Code Playgroud)
exports在XE5中添加了此函数和指令.
在XE6中构建DLL时,有没有办法避免导出此函数?
如果您的库包含该System.Rtti单元,则DLL将导出该功能.如果要生成不导出该函数的DLL,我可以看到以下选项:
System.Rtti在您的图书馆中.System.Rtti不导出该功能的修改版本.在我看来,前两个选项并不是很吸引人.第三种选择看起来很有吸引力,但我认为这可能很难成功.似乎这个长期存在的伎俩不再起作用.我还没有能够重新编译RTL单元,并避免使用不同版本的Y错误编译可怕的X.
这样就留下了最后的选择.再一次,没有大量的吸引力.你可能决定只是把它搞砸并接受这种迷失的出口.也许质量控制报告可能会给Embarcadero带来一点压力,要求重新考虑这个决定.
对于它的价值,我认为没有编译器库代码应该无条件地导出函数.它应该是图书馆的消费者,而不是作出决定的图书馆的实施者.