0

我的旧 Delphi 7 应用程序IdStreamVCLWin32在一个 pas 文件中使用单元。该单元位于以下位置。

C:\Program Files\Indy 10 for Delphi\Source\System\IdStreamVCLWin32.pas

当我在我的 Delphi XE4 环境中运行相同的代码时,我得到了IdStreamVCLWin32找不到错误。

注意:Delphi 7 使用的是 Indy 10,但 Delphi XE4 使用的是默认的 Indy。我没有在 Delphi XE4 环境中明确安装 indy。

我搜索了安装 Delphi XE4 的整个 C 盘,但没有找到IdStreamVCLWin32.pas文件。

如何摆脱这个错误?

4

1 回答 1

1

据我所知,您从来没有打算直接包含该单元。该单位IdStreamVCL将委托给IdStreamVCLDotNetIdStreamVCLWin32。所以在我看来,这IdStreamVCLWin32是一个实现细节,你可以通过使用IdStreamVCL.

如今,这些单位已全部合并为IdStreamVCL. 所以你可以把它包括在内。但是,我不清楚您是否应该这样做。看看IdStream

unit IdStream;

interface

{$I IdCompilerDefines.inc}

uses
{$IFDEF DOTNET}
  IdStreamNET
{$ELSE}
  IdStreamVCL
{$ENDIF};

type
{$IFDEF DOTNET}
  TIdStreamHelper = TIdStreamHelperNET;
{$ELSE}
  TIdStreamHelper = TIdStreamHelperVCL;
{$ENDIF}

implementation

end.

似乎很清楚,您打算使用IdStream并让编译器确定该实现是否由IdStreamNETor提供IdStreamVCL

因此,您的问题的答案可能是您应该替换使用IdStreamVCLWin32with IdStream。请注意,IdStream现在实现的功能有所不同。您不再实例化流类的实例。现代 Indy 为您提供了一个TIdStreamHelper包含类函数的辅助类。所以你最终会写出这样的代码:

BytesWritten := TIdStreamHelper.Write(Stream, Bytes, Count);

但是,我不能确定这是正确的方法,因为我不知道您实际使用的IdStreamVCLWin32. IdStreamVCLWin32您的代码从那里没有使用任何东西,并且使用只是您的某些旧版本代码的流浪宿醉,这是很合理的。

所以我的建议是:

  1. IdStreamVCLWin32从您的用途中删除。
  2. 通过研究代码并找出使用当前 Indy 代码的正确方法来处理任何后续的编译器错误。
于 2013-11-07T09:12:26.180 回答