Hallo!
Ich habe ein Problem mit dieser Funktion:
Delphi-Quellcode:
procedure TMyThread.VariantToTBytes(Data: OleVariant; var Result:TBytes);
var
p: Pointer;
MyVariantStream :TMemoryStream;
MyByte: TBytes;
begin
try
if not assigned(MyVariantStream) then
MyVariantStream := TMemoryStream.Create
else begin
MyVariantStream.Free;
MyVariantStream := TMemoryStream.Create;
end;
except
Result := nil;
Exit;
end;
p := VarArrayLock(Data);
try
MyVariantStream.Write(p^, VarArrayHighBound(Data,1) + 1);
finally
VarArrayUnlock(Data);
end;
SetLength(MyByte,MyVariantStream.Size);
MyVariantStream.Position := 0;
MyVariantStream.Read(MyByte[0],MyVariantStream.Size);
MyVariantStream.Free;
Result := MyByte;
end;
Ich möchte einen OleVariant zu TBytes wandeln. Wenn ich es debugge dann beim ersten Einstieg in diese Funktion die var MyVariantStream schon Assigned!?
Wenn er nun ein Free druchführt kommt es zur Zugriffsverletzung.
Auch wenn ich den MemoryStream einfach erzeuge gibt es eine Zugriffsverletzung.
Was kann hier der Fehler sein?
Oder gibt es einen einfacheren Weg eine OleVariant in TBytes umzuwandeln?
Die Länge der benötigten TBytes ist vorher unbekannt!