如何告诉Delphi在DXS中使用本地项目的Security.pas文件而不是Winapi.Security.pas?

Joh*_*ter 1 delphi dcc32 delphi-10-seattle

Delphi 10 Seattle介绍了Winapi.Security.pas.我正在尝试升级的项目(包)已经有一个Security.pas文件.如果没有从项目范围名称列表中删除Winapi(巨大的不良涟漪效应),有没有办法告诉IDE和编译器使用项目的Security.pas文件而不是Winapi.Security.pas?

我已经尝试重命名项目Security.pas,但这导致了更多的问题,编译器生成的错误与它所抱怨的代码无关,所以这是一个rathole我宁愿现在不去.这个项目在XE7,FWIW中建立得很好,所以这不是由于项目中的任何代码更改.

更新:

  • 重命名文件并使用单位别名不起作用.
  • 包的编译器行为与应用程序不同.

Dav*_*nan 5

看起来这可能实际上与Winapi.Security单元有关,而不是像你在问题中建议的那样通用.例如,以下包编译得很好:

package Package1;

requires
  rtl;

contains
  Windows in 'Windows.pas'; // blank unit named Windows.pas in project folder

end.
Run Code Online (Sandbox Code Playgroud)

请注意,我和您一样,包含Winapi在项目的单位范围名称列表中.

另一方面,这个包不编译:

package Package1;

requires
  rtl;

contains
  Security in 'Security.pas'; // blank unit named Security.pas in project folder

end.
Run Code Online (Sandbox Code Playgroud)

编译器失败:

[dcc32错误] Package1.dpk(7):E2200包'rtl'已包含单位'Winapi.Security'

如果问题纯粹与单元范围名称相关,那么两个软件包都会编译,或者两者都会失败.因此,我的结论是,有一些事情是不可能的Winapi.Security.

我找不到源代码Winapi.Security.我想知道它究竟是什么.[Nicholas Ring找到我的来源,在rtl\win\winrt目录中.]

无论如何,我认为是时候提交QP报告了.无法编译的下面的包可能是该QP报告的起点.[您提交的报告在此处为RSP-12469.]

我似乎很清楚,如果你想收养西雅图,你必须在短期内重新命名你的单位.

FWIW,这里有一些其他单位的行为方式如下Winapi.Security:

  • Winapi.ApplicationModel
  • Winapi.CommonTypes
  • Winapi.Devices
  • Winapi.Foundation
  • Winapi.Gaming
  • Winapi.Globalization
  • Winapi.GraphicsRT
  • Winapi.Management
  • Winapi.Media
  • Winapi.Networking
  • Winapi.Storage
  • Winapi.UI
  • Winapi.WebRT

这些都是新增的WinRT单元,我认为这些单元非常重要.