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.