Delphi编译器警告指着德尔福自己的单位

问题描述 投票:8回答:8

2007年德尔福,工作的一个项目,该项目包括一个自定义组件,我得到这一套警告在消息前四,当我做一个完整的版本(但不是当我做了直编译):

[DCC Warning] Dialogs.pas(1426): W1002 Symbol 'TFileOpenDialog' is specific to a platform
[DCC Warning] Dialogs.pas(1446): W1002 Symbol 'TFileSaveDialog' is specific to a platform
[DCC Warning] ComCtrls.pas(6757): W1036 Variable 'Section' might not have been initialized
[DCC Warning] ComCtrls.pas(19268): W1023 Comparing signed and unsigned types - widened both operands

我一般尽量消除编译器警告在那里我可以,但这些“股票”德尔福单位。难道这些警告在我的代码一些间接的结果?如果是这样,我怎么弄清楚什么/在哪里?如果不是这样,我应该怎么办呢?

delphi ide compiler-construction custom-component
8个回答
12
投票

我相信这是因为你必须在你的构建路径股票Delphi源。如果删除了德尔福源目录,那么就应该建立一个没有这些警告。


6
投票

他们表现出了做一个Build只有当原因是编译命令只编译自上次编译已更改源。虽然生成命令重新编译该项目无论改变的一切。

最有可能由Delphi源文件夹引起的警告被包含在项目中的搜索路径。删除它,并在项目的文件夹中删除的DCU会告诉你,如果在项目的任何所需的Delphi源时重新编译。根据我的经验,如果您需要在Delphi源,如果你发现在Delphi的实现中的错误,并提出了德尔福类的自定义副本来纠正错误。如果是这样的话,当你试图建立没有Delphi源通常你会得到:

单元 '%s' 的编译时单元 '%s' 于 '%s' 的,但不同的版本 '%s' 的实测值(F2446)

其中%s将是一些低级别的Delphi类。

如果你没有得到任何错误的它并没有真正需要的Delphi源。

如果Delphi源在环境中的搜索路径也会发生这种情况。


3
投票

你提到的(以及其他一些)前两个警告是让你知道,你正在使用中的代码将无法在不同的平台支持的Delphi编译。对于德尔福2007年,没有太多,但它承载的Kylix(Linux的版本已经走了)和德尔福的。NET(也消失)的残余。

最近德尔福支持跨平台版本的(Win32 / Win64平台,OS X,iOS版和Android),其中这些信息开发Firemonkey应用程序(或应用程式VCL如果有Win32和Win64平台之间的差异)时是相关的一次。他们指出在你的代码,你将不得不在你的代码为不同的操作系统调整点。 (例如,你举的这两个是针对Windows的对话框,你需要使用基于目标平台上不同的对话框,并使用{$IFDEF}语句周围已让它们被编译为平台特定的领域其他平台。

作为当前的代码不能直接移植(即使是在现代德尔福版本)到Windows以外的任何东西,因为它是基于VCL,你可以安全地关闭这些警告。使用Project->Options->Compiler Messages,并取消下列消息(或使用编译器定义I已经包含在你的代码):

Library Symbol                       {$WARN SYMBOL_LIBRARY OFF}
Platform Symbol                      {$WARN SYMBOL_PLATFORM OFF}
Library Unit                         {$WARN UNIT_LIBRARY OFF}
Platform Unit                        {$WARN UNIT_PLATFORM OFF}
Unsafe type  (.NET remnant)          {$WARN UNSAFETYPE OFF}
Unsafe code  (.NET remnant)          {$WARN UNSAFECODE OFF}
Unsafe typecast (.NET remnant)       {$WARN UNSAFECAST OFF}

最后两个你所提到的,我不能与D2007(IDE版本11.0.2804.9245)复制,所以我怀疑skamradt的答案是正确的 - 这是因为你有VCL源目录在你的搜索路径,你不该”吨。应设置为$(BDS)\Lib。如果您需要能够逐步完成源,使用Project->Options->Compiler页面,检查下Use debug DCUsDebugging选项,而不是。


2
投票

我花了年龄让这些问题(当然,你的前两个反正)和我的无知实际上卸载Delphi和它重新安装无济于事。我终于发现,由于缺乏项目设置造成的。至少atfirst,如果迁移从早期的德尔福项目,现有项目的设置值转换,但没有明显的原因德尔福可以开始忘记了这一点,并给你一个“空白”设定的项目设置。您可以通过打开项目的选项,你会发现基础,发布和调试看到这一点。退房的一个活跃的(它是在项目经理大胆),你应该看到它有没有目录的路径,以及在其默认所有的提示和警告。大多数这些默认的都很好,但“平台符号”和“平台单位”应该被禁用(至少为Win32的东西)。此致,布赖恩


2
投票

如果你想继续明确编译VCL源到你的项目,你可以说是提高了编译器提示/警告单位的副本,并“修复”,在副本中的提示/警告。把更新/“固定”那些VCL单元的副本在另一个文件夹,并确保你的路径添加到该文件夹​​到项目的搜索路径的路径德尔福VCL源之前。

例如。我的项目搜索路径看起来是这样的: “C:\开发\来源\ MyFixedVCLUnits; C:\ Program Files文件\的CodeGear \ RAD Studio在\ 6.0 \源”

为了给删除这些警告所需的简单修复的一个例子,这里是在Dialogs.pas的功能,现在住在我一个“C:\开发\来源\ MyFixedVCLUnits”文件夹:

{$WARNINGS OFF}
function TFileOpenDialogWrapper.CreateFileDialog: TCustomFileDialog;
begin
Result := TFileOpenDialog.Create(nil);
Result.OnExecute := OnExecuteEvent;
end;
{$WARNINGS ON}

在这种情况下,只需添加{$警告OFF}等要求。


2
投票

TFileOpenDialog将在Windows Vista和只占工作。您应该使用TOpenDialog代替TFileOpenDialog,在新德尔福的版本,它将检测什么OS上运行,并且显示适当的对话框。 https://forums.embarcadero.com/thread.jspa?threadID=70498


1
投票

如果你只开发针对特定平台的开放项目源,并添加

{$WARN SYMBOL_PLATFORM OFF}

0
投票

编译器警告可以在“Delphi编译器项目选项分别被禁用(每警告分离式)|提示和警告

© www.soinside.com 2019 - 2024. All rights reserved.