Delphi 警告";Symbol TMemoryManager已弃用";编译器编译完成后显示

Delphi 警告";Symbol TMemoryManager已弃用";编译器编译完成后显示,delphi,delphi-xe7,Delphi,Delphi Xe7,在编译源代码之后,在编译器的[Success]消息之后,“Messages”面板中出现了几个警告 有时,当我将光标放在关键字/变量上,屏幕上会出现Code Insight弹出窗口(编译后),有时则不会。外观是随机的(警告可能出现也可能不出现)。基本上,它取决于IDE中光标的位置 [警告]W1000符号“TVariantManager”已弃用 [警告]W1000符号“TMemoryManager”已被弃用:“使用TMemoryManagerEx” [警告]W1000符号“TSingleRec”已弃

在编译源代码之后,在编译器的[Success]消息之后,“Messages”面板中出现了几个警告

有时,当我将光标放在关键字/变量上,屏幕上会出现Code Insight弹出窗口(编译后),有时则不会。外观是随机的(警告可能出现也可能不出现)。基本上,它取决于IDE中光标的位置

[警告]W1000符号“TVariantManager”已弃用
[警告]W1000符号“TMemoryManager”已被弃用:“使用TMemoryManagerEx”
[警告]W1000符号“TSingleRec”已弃用:“使用TSingleHelper”
[警告]W1000符号“TDoubleRec”已弃用:“使用TdoublerHelper”

当我双击消息时,什么也没有发生

你知道这是什么原因吗


由于这是在编译器完成后出现的,我想这可能是我拥有的插件之一(GExpers、CnPack、Andy的),但我直到现在才看到它。

最后,我有一个解释。以下是我的IDE的构建窗口的一些输出:

Checking project dependencies... Compiling Foo.dproj (Debug, Win32) dcc command line for "Foo.dpr" ..... // spurious details removed Success Elapsed time: 00:00:05.2 [Error] E1000 Symbol 'TImageIndex' is deprecated: 'Use System.UITypes.TImageIndex' [Error] E1000 Symbol 'CM_THEMECHANGED' is deprecated: 'Use CM_STYLECHANGED' [Error] E1000 Symbol 'RaiseList' is deprecated: 'Use AcquireExceptionObject' [Error] E1000 Symbol 'TMemoryManager' is deprecated: 'Use TMemoryManagerEx' [Error] E1000 Symbol 'Release' is deprecated [Error] E1000 Symbol 'ThemeServices' is deprecated: 'Use StyleServices' [Error] E1000 Symbol 'faVolumeID' is deprecated [Error] E1000 Symbol 'GetHeapStatus' is deprecated [Error] E1000 Symbol 'THeapStatus' is deprecated [Error] E1000 Symbol 'THeapStatus' is deprecated [Error] E1000 Symbol 'THeapStatus' is deprecated [Error] E1000 Symbol 'THeapStatus' is deprecated [Error] E1000 Symbol 'THeapStatus' is deprecated [Error] E1000 Symbol 'THeapStatus' is deprecated [Error] E1000 Symbol 'THeapStatus' is deprecated [Error] E1000 Symbol 'THeapStatus' is deprecated [Error] E1000 Symbol 'THeapStatus' is deprecated [Error] E1000 Symbol 'THeapStatus' is deprecated [Error] E1000 Symbol 'THeapStatus' is deprecated [Error] E1000 Symbol 'TScrollStyle' is deprecated: 'Use System.UITypes.TScrollStyle' 正在检查项目依赖项。。。 编译Foo.dproj(调试,Win32) “Foo.dpr”的dcc命令行 ..... // 去除虚假细节 成功 运行时间:00:00:05.2 [错误]E1000符号“TImageIndex”已被弃用:“使用System.UITypes.TImageIndex” [错误]E1000符号“CM\u THEMECHANGED”不推荐使用:“Use CM\u STYLECHANGED” [错误]E1000符号“RaiseList”已弃用:“使用AcquireExceptionObject” [错误]E1000符号“TMemoryManager”已弃用:“使用tmemorymanagerx” [错误]E1000符号“发布”已弃用 [错误]E1000符号“ThemeServices”已弃用:“使用样式服务” [错误]E1000符号“faVolumeID”已弃用 [错误]E1000符号“GetHeapStatus”已弃用 [错误]E1000符号“THeapStatus”已弃用 [错误]E1000符号“THeapStatus”已弃用 [错误]E1000符号“THeapStatus”已弃用 [错误]E1000符号“THeapStatus”已弃用 [错误]E1000符号“THeapStatus”已弃用 [错误]E1000符号“THeapStatus”已弃用 [错误]E1000符号“THeapStatus”已弃用 [错误]E1000符号“THeapStatus”已弃用 [错误]E1000符号“THeapStatus”已弃用 [错误]E1000符号“THeapStatus”已弃用 [错误]E1000符号“THeapStatus”已弃用 [错误]E1000符号“TScrollStyle”已弃用:“使用System.UITypes.TScrollStyle” 当我试图使用CTRL+click导航到源代码中符号的定义时,出现了这组特定的错误。然后,IDE使用它的一个内部解析器/编译器来理解代码并准确地计算出这是哪个符号。这个内部解析器/编译器是用Delphi编写的,它会发出提示、警告和错误,这些提示、警告和错误会出现在主IDE构建窗口中


我知道你看到的一组具体的警告在内容上与我的不同,但我确信根本原因在原则上是相同的。其中一个内部解析器/编译器正在输出这些消息,因此它们与代码内容完全无关。

David答案的附录。触发这种奇怪行为的另一个因素是重构。这就是我在尝试应用“向上拉成员”重构失败后得到的结果

Checking project dependencies...
..... // spurious details removed
Success
Elapsed time: 00:00:01.9
[Warning] W1000 Symbol 'vmtEquals' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtGetHashCode' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtToString' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtSafeCallException' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtAfterConstruction' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtBeforeDestruction' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtDispatch' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtDefaultHandler' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtNewInstance' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtFreeInstance' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtDestroy' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtQueryInterface' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtAddRef' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtRelease' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'vmtCreateObject' is deprecated: 'Use VMTOFFSET in asm code'
[Warning] W1000 Symbol 'TVariantManager' is deprecated
[Warning] W1000 Symbol 'TVariantManager' is deprecated
[Warning] W1000 Symbol 'TMemoryManager' is deprecated: 'Use TMemoryManagerEx'
[Warning] W1000 Symbol 'TMemoryManager' is deprecated: 'Use TMemoryManagerEx'
[Warning] W1000 Symbol 'THeapStatus' is deprecated
[Warning] W1000 Symbol 'THeapStatus' is deprecated
[Warning] W1000 Symbol 'HPrevInst' is deprecated
[Warning] W1000 Symbol 'AllocMemCount' is deprecated
[Warning] W1000 Symbol 'AllocMemSize' is deprecated
[Warning] W1000 Symbol 'TSingleRec' is deprecated: 'Use TSingleHelper'
[Warning] W1000 Symbol 'TSingleRec' is deprecated: 'Use TSingleHelper'
[Warning] W1000 Symbol 'TDoubleRec' is deprecated: 'Use TDoubleHelper'
[Warning] W1000 Symbol 'TDoubleRec' is deprecated: 'Use TDoubleHelper'
[Warning] W1000 Symbol 'TextStart' is deprecated
[Warning] W1000 Symbol 'GetHeapStatus' is deprecated
[Warning] W1000 Symbol 'RaiseList' is deprecated: 'Use AcquireExceptionObject'
[Warning] W1000 Symbol 'SetRaiseList' is deprecated: 'Use AcquireExceptionObject'
[Warning] W1000 Symbol 'Mark' is deprecated
[Warning] W1000 Symbol 'Release' is deprecated
[Warning] W1000 Symbol 'FPower10' is deprecated: 'Use Power10'
[Warning] W1000 Symbol 'GetVariantManager' is deprecated
[Warning] W1000 Symbol 'SetVariantManager' is deprecated
[Warning] W1000 Symbol 'IsVariantManagerSet' is deprecated
[Warning] W1000 Symbol 'UTF8Decode' is deprecated: 'Use UTF8ToWideString or UTF8ToString'

我们可以再次看到对“TMemoryManagerEx”的引用

没有。该消息在编译器说“完成”后随机出现。我将上传一个截图来显示它。此外,双击警告会将我带到生成消息的行,但它不会。因此,您需要隔离此消息。看来你开得太快了。我相信发生的一切都是正常的。您期望编译器/IDE在编译过程中发出警告,然后完成;可能发生的情况是,编译器/IDE正在收集警告,完成编译,然后列出它遇到的警告。并非每次编译都会发出警告,因为编译时并不是每个单元都会重新编译—只编译已更改且需要重新编译的单元。仅对已编译的单元发出警告。警告不是“随机的”——如果您想看到所有警告,请确保在编译之前执行清理。这将清除所有DCU,并重新编译项目中的所有内容,显示所有单元的所有警告。@Rudy在失败行或成功行之后,您将收到警告消息,这些警告既没有文件名,也没有行号。成功或失败之前的消息确实有文件名和行号?“因此它们与代码内容完全无关”-我想象,因为“我没有识别出这些警告中显示的任何类/记录。问题是:为什么现在开始显示这些警告。我不记得以前见过他们。在过去的三天里,他们(又)完全停了下来。这很难确定。有时它们出现,有时它们不出现。对我来说,这取决于我在代码库中的位置,以及它们是否出现。我的代码的不同方面可能会触发通过内部解析器/编译器代码的不同路径。但最后,您只需忽略这些消息。您知道它们与您的使用无关,当您在命令行上为真正的构建编译时,您将看不到它们,并且编译对话框不会在其警告/提示计数中包含它们。所以它不应该影响你的工作流程。只是另一个德尔福怪癖。谢谢David帮我们了解这件事。