问题 Delphi XE2后台IDE编译器无法找到源路径


我刚买了XE2版,安装了更新1 ISO,并制作完成 我的开源项目 用它编译。

事实上:

  • 我将库的源代码路径添加到常规设置IDE(对于我使用的所有平台,即Windows 32位和64位到目前为止);
  • 我编译了 TestSQLite3.dpr 我们框架的回归测试 - 没问题:编译EXE并通过所有测试;
  • 我对IDE后台编译器有一个奇怪的问题:即使编译了项目,IDE也会显示一些关于未知文件的错误(不在底层编译器消息中,而是在类导航树的顶部 - 留给源代码编辑器) ),在.dpr源代码中,单位名称用红色下划线,我无法在源内导航(使用Ctrl +单击符号)。

我已经将库的源代码路径添加到项目选项中(对于Win32 / Win64 - 即使它已经在全局IDE级别设置)。现在,有关未知文件的错误消失了,但源代码中的单元名称仍以红色下划线,并且Ctrl + Click不起作用。

TestSQLite3.dpr 源代码 不指定单位的完整路径:

uses
  {$I SynDprUses.inc}
  Windows,
  Messages,
  SysUtils,
  Classes,
  SynCrypto,
  SynCrtSock,
  SynCommons,
  SynDB,
  SynOleDB,
  SynDBOracle,
  (...)

在上面的行中,SynCrypto,SynCrtSock,SynCommons用红色标出。

我的实际猜测是.dpr中需要完整的路径(SynCrypto in '..\SynCrypto.pas')。我没有测试这个,因为我没有XE2在工作。

由于以前的IDE使用这种源代码(从Delphi 6到XE)没有问题,我想知道是否存在回归的可能性,或者以前版本的IDE没有新的选项(可能基于平台)我没有正确设置。或者也许在.dpr中需要完整路径 - 但这听起来像Code / Error Insight编译器中的回归给我。


3462
2017-10-03 08:10


起源

更新2仍然存在相同问题。后台编译器无法检索公共库文件夹。 - Arnaud Bouchez
更新3安装后 - 仍然相同。我通过删除.dpr中的任何代码并将所有文件放在外部单元中找到了解决方案。看到 synopse.info/fossil/info/ddcf953db5 - Arnaud Bouchez
你好!在mORMot SAD中偶然发现:“不太频繁的查询可能会执行其他分离的集合” - 打赌你的意思是“结束”而不是“其他”:-) PS。您是否考虑过向复制添加事务感知?因此,如果主/从连接在大表更新的中间丢失,它将不会结束半更新?明显的解决方案将是全有或全无,但它在缓慢/模糊的互联网上有其自身的问题 - Arioch 'The
还有一个小故障。我在线阅读SAD 1.18 html - 在4.1部分我点击WinAnsiString链接。它将我重定向到404 URL http://synopse.info/files/html/api-1.18%5CSynCommons.html#WINANSISTRING  - 注意错了 %5C 而不是一个正确的斜线单个字符 - Arioch 'The
@Arioch'我试图解决这个问题。感谢您的反馈!关于远程连接,框架中有BATCH功能允许此自动事务。即使我们最新的主/从复制也尽可能使用事务。 - Arnaud Bouchez


答案:


我问了这个问题 鲍勃博士 (我买了XE2许可证 - 因为1 $ = 1€方程式听起来有点不公平,我至少想让一个真正的Delphi专家成为我的经销商)。

这是他的答案:

你没有犯错。问题是有三个   XE2中的编译器(与之前版本的Delphi一样):真实的   编译器(工作正常),Code Insight编译器(即   更快),Error Insight编译器(必须更快),   和语法高亮解析器(这是最快的)。

XE2引入了许多使得普通编译器的功能   更慢,并给了Code Insight和Error Insight编译器一些   麻烦。首先,我们有新的目标:Win32,Win64和OSX   这会导致每个目标的搜索路径不同(请参阅   $ PLATFORM指令),以及构建配置,尽管有   每个PLATFORM只有一个“库路径”(而不是构建版本)   配置)。

第二个复合因素是虚线单位名称(作用单位)   引入的名称)。 Windows不再是Windows,而是   Winapi.Windows。

我的猜测是这两个额外的复杂因素导致   Code Insight和Error Insight编译器的问题。注意   真正的编译器仍然有效。但Error Insight显示不正确   错误,Code Insight并不总是适用于这些单位。

您可以尝试再次将它们显式添加到项目中(其中   如果您在问题中提到,将使用完整路径   堆栈溢出也是如此)。

所以我担心这会有些回归......

在结束问题时编辑:

第一点是添加完整路径:

  SynPdf in '..\SynPdf.pas',

在.dpr中确实找到了文件 - 但后台编译器仍然丢失,无法在本机构中找到类声明。

只是另一个回归样本:

   var Thread: array[0..3] of integer; 
       Handle: array[0..high(Thread)] of integer;

是一个非常安全的语法,编译得很好,由以前的Error Insight编译器解释没有任何问题(自Delphi 5起作用),但在XE2下失败。

我对XE2 IDE有点失望。编译器使它工作。但IDE确实令人失望。从我的角度来看,这是不可用的。我将继续使用Delphi 7作为我的主编辑器,并使用XE2作为跨平台编译器和调试器。


11
2017-10-03 09:03



我对Delphi XE2的“范围单元名称”功能有疑问。这是我必须应用于我们的框架源代码的主要修改: Graphics 单位必须标记为 VCL.Graphics 在里面 uses 条款。好吧,这只是一个有条件的添加,但老实说,我必须在我的代码中编写的条件越少越好。有很多第三方项目(不仅仅是Open Sourced)依赖于支持很多Delphi平台(至少是Delphi 7/2007)。这种回归对于私有应用程序代码来说没有问题,但对于库来说并不好。 - Arnaud Bouchez
我怀疑这值得QC参赛,你怎么看? - Arnaud Bouchez
我真的对此感到失望。也许使用FPC应该已经足够了,而且已经更好了(因为它支持更多的平台和目标)。 - Arnaud Bouchez
必要的单位范围名称也可以作为传递 -NS 相反,编译器的参数(iirc这个选项自Delphi 2009起存在)以避免代码中的条件 - mjn
@mjn 1. COMPILER按预期工作,我的代码中没有条件。其他IDE特定的后台编译器无法编译有效代码,恕我直言,他们不使用这些参数。这些编译器甚至忽略了Project / Options参数。 2.恕我直言这些问题没有任何单位范围名称的链接,但是第一个问题的库路径和第二个问题的编译器错误。也许实现单元范围名称打破了那些编译器,但设置单元范围也无济于事。 - Arnaud Bouchez


可能与Barry Kelly在这里提到的内容有关:

http://blog.barrkel.com/2011/10/delphi-xe2-compiler-performance.html


0
2017-10-05 01:38



本文介绍了主编译器(在IDE和DCC32.exe中 - 创建EXE的编译器),它与源代码一起使用。问题出在后台IDE编译器中,它似乎与主Delphi编译器不在同一级别。 - Arnaud Bouchez