在Delphi XE4中找不到IdStreamVCLWin32错误

时间:2013-11-07 08:17:05

标签: delphi delphi-7 indy indy10 delphi-xe4

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

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文件。

如何摆脱这个错误?

1 个答案:

答案 0 :(得分: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并让编译器确定该实现是由IdStreamNET还是IdStreamVCL提供的。

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

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

但是,我不能确定这是正确的方法,因为我不知道你在IdStreamVCLWin32中实际使用了什么。你的代码在那里没有使用任何内容是非常合理的,使用IdStreamVCLWin32只是一些旧版本代码的遗留问题。

所以我的建议是:

  1. 从您的使用中移除IdStreamVCLWin32
  2. 通过研究代码并以正确的方式使用当前的Indy代码来处理任何后续的编译器错误。