Delphi 7: Convert (serialize?) An Object to TByteDynArray (for SOAP)

I use Delphi 7 and import from a WDL file to create a SOAP client. Delphi creates an interface code with published functions from WSDL and parameter types (classes) for these functions.

Delphi determined that something like this

  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;

should be sent as TByteDynArray ...

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

which requires me to convert the object to TByteDnyArray, which are Delphi n00b creatures - I do this with

  theMessageArray := TByteDynArray(theMessage);

, ( Ftimestamp Ftimestamp), TByteDynArray, . , , "" - , . TByteDynArray, ? ( , , "" , )

, ...

+3
1

. objectinstance.savetostream . , membes .

, , (, tdynbytearray). memystream.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);
+2

Source: https://habr.com/ru/post/1752627/


All Articles