gpt4 book ai didi

Delphi 7 : Converting (serializing? ) TByteDynArray 的对象(用于 SOAP)

转载 作者:行者123 更新时间:2023-12-03 15:57:30 26 4
gpt4 key购买 nike

我使用 Delphi 7 并从 WDL 文件导入来创建 SOAP 客户端。 Delphi 使用来自 WSDL 的已发布函数以及这些函数的参数类型(类)生成接口(interface)代码。

Delphi 已确定类似这样的事情

  Message = class(TRemotable)
private
FMessageID: Int64;
Ftimestamp: TXSDateTime;
Fevent: eventType;
FmagicNumber: WideString;
FDataPart: DataPart;
published
property MessageID: Int64 read FMessageID write FMessageID;
property timestamp: TXSDateTime read Ftimestamp write Ftimestamp;
property event: eventType read Fevent write Fevent;
property magicNumber: WideString read FmagicNumber write FmagicNumber;
property DataPart: DataPart read FDataPart write FDataPart;
end;

应作为 TByteDynArray 发送...

function  sendMessage(const theMessage: TByteDynArray; 
const data: DataPart): WideString; stdcall;

这需要我将一个对象转换为 TByteDnyArray,这 - Delphi n00b - 我正在这样做

  theMessageArray := TByteDynArray(theMessage);

当我在调试器中查看该对象时,它包含指针(指向 FtimestampFtimestamp),当我查看 TByteDynArray 时,我看到 self相同的指针值。所以,看来“ Actor ”并不是我想要的。如何将我的对象转换为所需的 TByteDynArray? (并且大概“内联”指针指向的对象)

我认为有一个标准方法......

最佳答案

在父类中查找传输数据的方法。 objectinstance.savetostream 左右。它可能会迭代已发布的成员并将它们写入流。

使用它将其写入内存流,该内存流大致是围绕内存块的类(如 tdynbytearray)。然后使用 memorystream.size 和 setlength 将 tbytedynarray 分配到适当的大小,并将字节从内存流复制到新创建的数组:

 // (Untested)

memstream:=TMemoryStream.Create;
objectinstance.SaveToStream(memstream);
setlength(mybytearray,memstream.size);
if memstream.size>0 then
move (pansichar(memstream.memory)^,mybytearray[0],memstream.size);

关于Delphi 7 : Converting (serializing? ) TByteDynArray 的对象(用于 SOAP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163116/

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