Einzelnen Beitrag anzeigen

shmia

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

Re: COM-Objekt und Pointer-Type

  Alt 22. Apr 2008, 15:35
Bei COM müssen ja Daten teilweise über Prozessgrenzen hinweg transportiert werden.
Und da wird es bei einem Zeiger ja sehr problematisch, da dieser Zeiger in einem anderen Prozess auf etwas völlig anderes zeigt.
Man kann deshalb nur Datenblöcke über Prozessgrenzen tranportieren.
Wenn das COM-System weiss, dass die Daten bei Adresse XY beginnen und sagen wir 500 Bytes lang sind, dann kann man ja diesen Speicherblock kopieren und/oder im Zielprozess einblenden.
Bei DCOM werden die Daten übers Netzwerk verschickt.

Deshalb verpackt man binäre Daten häufig in einem Variant-Array vom Typ varByte.
Delphi-Quellcode:
function VarByteArrayCreate(const Data; len:Integer):Variant;
var
   vdata : Pointer;
begin
   if len > 0 then
   begin
      Result := VarArrayCreate([0, len-1], varByte);
      vdata := VarArrayLock(Result);
      try
         Move(Data, vdata^, len);
      finally
         VarArrayUnlock(Result);
      end;
   end
   else
      Result := Null;
end;
Man erkennt an deinem Sourcecode nicht genau, was du tun möchtest; irgendetwas mit Samples.
Wenn du jedes einzelne Sample über eine COM Funktion schicken möchtest, dann musst du etwas umdenken
und stattdessen den gesamten Samplebuffer in einem OleVariant verpackt versenden.
Andreas
  Mit Zitat antworten Zitat