Delphi XE4中未找到IdStreamVCLWin32错误
我的旧Delphi 7应用程序正在一个pas文件中使用Delphi XE4中未找到IdStreamVCLWin32错误,delphi,delphi-7,indy,indy10,delphi-xe4,Delphi,Delphi 7,Indy,Indy10,Delphi Xe4,我的旧Delphi 7应用程序正在一个pas文件中使用IdStreamVCLWin32单元。该装置位于以下位置 C:\Program Files\Indy 10 for Delphi\Source\System\IdStreamVCLWin32.pas 当我在Delphi XE4环境中运行相同的代码时,发现错误IdStreamVCLWin32notfound 注意:Delphi7使用的是Indy 10,但Delphi XE4使用的是Indy,这是它的默认值。我没有在Delphi XE4环境中显
IdStreamVCLWin32
单元。该装置位于以下位置
C:\Program Files\Indy 10 for Delphi\Source\System\IdStreamVCLWin32.pas
当我在Delphi XE4环境中运行相同的代码时,发现错误IdStreamVCLWin32
notfound
注意:Delphi7使用的是Indy 10,但Delphi XE4使用的是Indy,这是它的默认值。我没有在Delphi XE4环境中显式安装indy
我搜索了安装Delphi XE4的整个C驱动器,但没有找到IdStreamVCLWin32.pas
文件
如何摆脱这个错误?据我所知,您从未打算直接包含该单元。装置
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
我包括了IdStreamVCL,但在第IdStreamVCL:=TIdStreamVCLWin32.Create(fStream)行中出现错误;在上面的语句中,我将TIdStreamVCLWin32更改为TIdStreamHelperVCL。然后我得到了错误“太多的实际参数”。此类中没有创建方法。我建议您按照我在更新答案的最后一部分中的建议执行。正如您所建议的,我用IdStream替换了单元idstreamvcclwin32,用TIdStreamHelper替换了类TIdStreamVCLWin32。现在我在idStreamVCL:=TIdStreamHelper.Create(fStream)处遇到错误;错误是实际参数太多没有,我建议删除
IdStreamVCLWin32
,并处理结果。您不需要实例化TIdStreamHelper
。仔细看。它是一个只包含类方法的类。我在答案中添加了更多内容。我使用了TIdStreamHelper类并对函数调用的参数进行了一些更改,这很有效!!谢谢大卫的帮助。我接受你的回答。