Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 更改Indy包的项目选项中的编译器输出位置会损坏其DPK文件_Delphi_Indy - Fatal编程技术网

Delphi 更改Indy包的项目选项中的编译器输出位置会损坏其DPK文件

Delphi 更改Indy包的项目选项中的编译器输出位置会损坏其DPK文件,delphi,indy,Delphi,Indy,使用Delphi10.3。。。我下载了最新的Indy文件,其IndySystem260.dpk文件如下所示: package IndySystem260; {$R *.res} {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO OFF} {$EXTENDEDSYNTAX ON} {$IMPORTEDDAT

使用Delphi10.3。。。我下载了最新的Indy文件,其
IndySystem260.dpk
文件如下所示:

package IndySystem260;

{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$DEFINE VER330}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'Indy 10 System'}
{$RUNONLY}
{$IMPLICITBUILD ON}

// RLebeau: cannot use IdCompilerDefines.inc here!

{$DEFINE HAS_PKG_RTL}
{$IFDEF NEXTGEN}
  {$IFDEF IOS}
    // there is no RTL package available for iOS
    {$UNDEF HAS_PKG_RTL}
  {$ENDIF}
{$ENDIF}

{$IFDEF HAS_PKG_RTL}
requires
  rtl;
{$ENDIF}

{$IFNDEF WINDOWS}
  {$IFDEF MSWINDOWS}
    {$DEFINE WINDOWS}
  {$ENDIF}
{$ENDIF}

contains
  IdAntiFreezeBase in 'IdAntiFreezeBase.pas',
  IdBaseComponent in 'IdBaseComponent.pas',
  IdCTypes in 'IdCTypes.pas',
  IdComponent in 'IdComponent.pas',
  IdException in 'IdException.pas',
  IdGlobal in 'IdGlobal.pas',
  IdIDN in 'IdIDN.pas',
  IdResourceStrings in 'IdResourceStrings.pas',
  {$IFNDEF WINDOWS}
  IdResourceStringsUnix in 'IdResourceStringsUnix.pas',
  IdResourceStringsVCLPosix in 'IdResourceStringsVCLPosix.pas',
  {$ENDIF}
  IdStack in 'IdStack.pas',
  IdStackBSDBase in 'IdStackBSDBase.pas',
  IdStackConsts in 'IdStackConsts.pas',
  {$IFDEF WINDOWS}
  IdStackWindows in 'IdStackWindows.pas',
  {$ELSE}
  IdStackVCLPosix in 'IdStackVCLPosix.pas',
  {$ENDIF}
  IdStream in 'IdStream.pas',
  IdStreamVCL in 'IdStreamVCL.pas',
  IdStruct in 'IdStruct.pas',
  {$IFDEF WINDOWS}
  IdWinsock2 in 'IdWinsock2.pas',
  IdWship6 in 'IdWship6.pas'
  {$ELSE}
  IdVCLPosixSupplemental in 'IdVCLPosixSupplemental.pas'
  {$ENDIF}
  ;

end.
只要我将
项目选项>构建>Delphi编译器>DCP输出目录
更改为
。\..\..\Delphi 10.3\DCP\$(平台)\$(配置)
DPK将更改为:

package IndySystem260;

{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'Indy 10 System'}
{$RUNONLY}
{$IMPLICITBUILD OFF}

rrequires
  rtl;

$contains
  IdAntiFreezeBase in 'IdAntiFreezeBase.pas',
  IdBaseComponent in 'IdBaseComponent.pas',
  IdCTypes in 'IdCTypes.pas',
  IdComponent in 'IdComponent.pas',
  IdException in 'IdException.pas',
  IdGlobal in 'IdGlobal.pas',
  IdIDN in 'IdIDN.pas',
  IdResourceStrings in 'IdResourceStrings.pas',
  IdStack in 'IdStack.pas',
  IdStackBSDBase in 'IdStackBSDBase.pas',
  IdStackConsts in 'IdStackConsts.pas',
  IdStackWindows in 'IdStackWindows.pas',
  IdStream in 'IdStream.pas',
  IdStreamVCL in 'IdStreamVCL.pas',
  IdStruct in 'IdStruct.pas',
  IdWinsock2 in 'IdWinsock2.pas',
  IdWship6 in 'IdWship6.pas' {$ENDIF};

d.
有人知道为什么会这样吗?如果不手动编辑DPK文件,是否可以防止此问题?我在XE3中也注意到了这一点

我注意到Indy instructions页面上有以下内容:

跨平台编译注意事项:

目前的Indy 10软件包项目是为Windows编译而设置的。 IndySystem和IndyProtocols包确实有一些 其中特定于平台的单元,通过 DPK文件中的IFDEF语句。这适用于命令行 编译,但IDE通常不处理DPK文件中的ifdef 很好,这也会导致关联的DPROJ文件被删除 无法与其DPK文件同步。因此,如果您愿意,这可能会导致问题 通过IDE为非Windows平台编译Indy 10(在Delphi中 支持此功能的版本)。您可能需要编辑IndySystem 项目以删除IFDEF并替换IdStackWindows, IdWinsock2和IdWship6单元,带有IdStackVCLPosix和 改为IDVCLPOSIX补充单元,然后编辑IndyProtocols 删除IFDEF和IdAuthenticationSSPI和IdSSPI的项目 单位。也许在未来的版本中,我们将尝试自动化/清理 这更好

如果您想通过IDE为非Windows平台编译Indy 10,它可能会说
,因此这可能会导致问题
,但我怀疑在更改选项后,我必须将DPK代码粘贴回去。

这看起来更像是混合换行的“众所周知”问题。
可能原始文件有unix结尾,IDE中的更改会将某些行转换为PC结尾。

DPR/DPK中的条件定义在IDE中效果不好。可能是,但不管它是什么,一旦你编辑了该包的项目选项,IDE就会把包代码完全弄乱。有趣的是,Indy DPK只有换行符,但在用CarraigerReturn+换行符替换它们之后,它仍然存在问题,所以我假设这个问题是“IDE不能很好地处理条件定义”CR+LF至少可以防止
requires
子句前面的不正确的附加
r
,并且
前面的
$
包含