Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datenbuffer als OleVariant übergeben ? (https://www.delphipraxis.net/115077-datenbuffer-als-olevariant-uebergeben.html)

Phunkafizer 5. Jun 2008 13:17


Datenbuffer als OleVariant übergeben ?
 
Moin moin,

ich habe aus der SpeechAPI ein Objekt (SpMemoryStream), welches als Buffer ein OleVariant übergeben haben will, um Daten auszulesen:

function TSpCustomStream.Read(out Buffer: OleVariant; NumberOfBytes: Integer): Integer;

Als Datanbuffer habe ich z.B. ein array of Byte, aber wie bekomme ich das der Read-Methode übergeben?

Schönen Dank für's Lesen
Gruß
Phunkafizer

shmia 5. Jun 2008 17:31

Re: Datenbuffer als OleVariant übergeben ?
 
Die Read()-Funktion liefert dir in einem OleVariant ja Daten zurück.
Also brauchst du erstmal nur eine Variable bereitstellen:
Delphi-Quellcode:
var
   xbuffer : OleVariant;
begin
  ..
  SpMemoryStream.Read(xbuffer, 1000);
  // die Daten sind jetzt in xbuffer
Dann musst du herausfinden, wie die Daten in xbuffer herauszuholen sind.
Wahrscheinlich handelt es sich um ein Variant-Array vom Typ varByte.
Delphi-Quellcode:
if VarType(xbuffer) = (varByte or varArray) then
   ShowMessage('Gut! Array von varByte vorhanden');
Wenn dem so ist, dann kannst du mit folgender Funktion die Daten rausholen:
Delphi-Quellcode:
function VarByteArrayToString(v:Variant):string;
var
   len : Integer;
   data : Pointer;
begin
   Assert(VarType(V) = varByte or varArray);
   Assert(VarArrayDimCount(V) = 1);

   len := VarArrayHighBound(v,1)-VarArrayLowBound(v,1)+1;
   SetLength(result, len);

   data := VarArrayLock(v);
   try
      Move(data^, Result[1], len);  // ***
   finally
      VarArrayUnlock(v);
   end;
end;
Wenn dir der String nicht gefällt, kannst du auch ein dynamisches array of Byte verwenden.
In der Zeile mit dem *** muss dann aber Move(data^, Result[0], len) stehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz