Je veux mettre à jour mon application d'Indy 9 à 10 avec Delphi 2007. Maintenant, cela ne compile plus que DecodeToStream est introuvable. Le code utilise Bold framwork car il est fait référence à BoldElement.DecodeToStream dans Indy10
Des méthodes alternatives à appeler?
MISE À JOUR (Je pense que je simplifie exemple précédent trop)
Code d'origine:
BlobStreamStr : String;
MIMEDecoder : TidDecoderMIME;
if (BoldElement is TBATypedBlob) then
begin
BlobStreamStr := copy(ChangeValue,pos(']',ChangeValue)+1,maxint);
(BoldElement as TBATypedBlob).ContentType := copy(ChangeValue,2,pos(']',ChangeValue)-2);
MIMEDecoder := TidDecoderMIME.Create(nil);
try
MIMEDecoder.DecodeToStream(BlobStreamStr,(BoldElement as TBATypedBlob).CreateBlobStream(bmWrite));
finally
FreeAndNil(MIMEDecoder);
end;
end
Après mon changement:
BlobStreamStr : String;
MIMEDecoder : TidDecoderMIME;
LStream : TIdMemoryStream;
if (BoldElement is TBATypedBlob) then
begin
BlobStreamStr := copy(ChangeValue, pos(']', ChangeValue) + 1, maxint);
(BoldElement as TBATypedBlob).ContentType := copy(ChangeValue, 2, pos(']',ChangeValue)-2);
MIMEDecoder := TidDecoderMIME.Create(nil);
LStream := TIdMemoryStream.Create;
try
MIMEDecoder.DecodeBegin(LStream);
MIMEDecoder.Decode(BlobStreamStr, 0, Length(BlobStreamStr));
LStream.Position := 0;
ReadTIdBytesFromStream(LStream, DecodedBytes, Length(BlobStreamStr));
// Should memory for this stream be released ??
(BoldElement as TBATypedBlob).CreateBlobStream(bmWrite).Write(DecodedBytes[0], Length(DecodedBytes));
finally
MIMEDecoder.DecodeEnd;
FreeAndNil(LStream);
FreeAndNil(MIMEDecoder);
end;
end
Mais je ne suis pas du tout confiance de mes changements car je ne connais pas tellement Indy. Donc, tous les commentaires sont les bienvenus. Une chose que je ne comprends pas est l'appel à CreateBlobStream. Je devrais vérifier avec FastMM donc ce n'est pas un mémleak.
Oui, l'appel à CreateBlobStream() est une fuite de mémoire. Vous devez Free() le flux lorsque vous avez fini de l'utiliser. –