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 XE4中未找到IdStreamVCLWin32错误_Delphi_Delphi 7_Indy_Indy10_Delphi Xe4 - Fatal编程技术网

Delphi XE4中未找到IdStreamVCLWin32错误

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环境中显

我的旧Delphi 7应用程序正在一个pas文件中使用
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
  • 通过研究代码并找出正确的方法来处理当前Indy代码,从而处理任何后续的编译器错误

  • 我包括了IdStreamVCL,但在第IdStreamVCL:=TIdStreamVCLWin32.Create(fStream)行中出现错误;在上面的语句中,我将TIdStreamVCLWin32更改为TIdStreamHelperVCL。然后我得到了错误“太多的实际参数”。此类中没有创建方法。我建议您按照我在更新答案的最后一部分中的建议执行。正如您所建议的,我用IdStream替换了单元idstreamvcclwin32,用TIdStreamHelper替换了类TIdStreamVCLWin32。现在我在idStreamVCL:=TIdStreamHelper.Create(fStream)处遇到错误;错误是实际参数太多没有,我建议删除
    IdStreamVCLWin32
    ,并处理结果。您不需要实例化
    TIdStreamHelper
    。仔细看。它是一个只包含类方法的类。我在答案中添加了更多内容。我使用了TIdStreamHelper类并对函数调用的参数进行了一些更改,这很有效!!谢谢大卫的帮助。我接受你的回答。