我的旧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
文件。
如何摆脱这个错误?
答案 0 :(得分:1)
据我所知,你从来没有打算直接包括那个单位。单位IdStreamVCL
会委托给IdStreamVCLDotNet
或IdStreamVCLWin32
。因此,我认为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
只是一些旧版本代码的遗留问题。
所以我的建议是:
IdStreamVCLWin32
。