AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Datenbuffer als OleVariant übergeben ?
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbuffer als OleVariant übergeben ?

Ein Thema von Phunkafizer · begonnen am 5. Jun 2008 · letzter Beitrag vom 5. Jun 2008
Antwort Antwort
Phunkafizer

Registriert seit: 9. Mär 2005
Ort: Fürth
18 Beiträge
 
#1

Datenbuffer als OleVariant übergeben ?

  Alt 5. Jun 2008, 13:17
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Datenbuffer als OleVariant übergeben ?

  Alt 5. Jun 2008, 17:31
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.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 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