gpt4 book ai didi

delphi - 如果某些 Delphi SOAP RTL OpConvert.pas 方法使用 String 而不是 Stream 作为其 XML 文档类型,为什么它们会被弃用?

转载 作者:行者123 更新时间:2023-12-03 15:58:31 25 4
gpt4 key购买 nike

我的代码中有一个警告,我不知道如何删除。该方法是一个实用程序方法,调用 THTTPRIO 的 FConverter 字段的 IOPConvert.ProcessResponse方法。

IOPConvert 中有多个 ProcessResponse 的重载版本,其中一个是使用参数类型 InvString 声明的版本。因为第一个参数已被弃用。

在整个 Delphi SOAP RTL 中,从 Delphi 7 到现在 (Delphi XE/XE2),趋势已经从字符串类型转向流类型。

问题是为什么?在这种情况下,我什至无法弄清楚如何转换我的帮助程序代码,除非我添加一个丑陋的字符串流包装器:​​

TRIOHelper = class helper for THTTPRIO
public
function HelperMethod(aMethName: String; aSoapString: String) : TRemotable;
end;

function TRIOHelper.HelperMethod(aMethName, aSoapString: String): TRemotable;
var
tmpString:String;
begin
//FConverter is a field in THTTPRIO
tmpStr := GrievousXmlHackery(aSoapString);
FConverter.ProcessResponse(InvString(tmpStr), IntfMD, MethMD, FContext);
...
end;

已弃用的调用上方的代码正在调整 XML 文档(SOAP 响应)并从传入流中删除一些有问题的元素。是的,一个黑客。我应该如何更改它,为什么 OpConvert 中的字符串不好?

我想我需要为 tmpString 制作一个字符串流或内存流包装器?请注意,在我的例子中,GrievousXmlHackery 函数删除了 <encoding>标签(如果存在)出于邪恶原因从 SOAP 中删除,但在这里仍然不重要。

除非旧方法和基于字符串的 api 在技术上确实存在错误,否则我将忍受该警告。但是如果(像 VCL 中的许多地方一样),已弃用的警告也意味着“这里有龙”,我想知道它。

最佳答案

我不熟悉 Delphi 的 SOAP 实现,但为什么不能直接使用 TStringStream 来代替呢?

function TRIOHelper.HelperMethod(aMethName, aSoapString: String): TRemotable;
var
Strm: TStringStream;

begin
//FConverter is a field in THTTPRIO
Strm := TStringStream.Create(GrievousXmlHackery(aSoapString));

// or
// Strm := TStringStream.Create('');
// Strm.DataString := GreviousXmlHackery(aSoapString);

FConverter.ProcessResponse(Strm, IntfMD, MethMD, FContext);
// Not sure if you or THTTPRIO is responsible for releasing the stream
...
end;

关于delphi - 如果某些 Delphi SOAP RTL OpConvert.pas 方法使用 String 而不是 Stream 作为其 XML 文档类型,为什么它们会被弃用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9896823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com