Đây là từ trình xử lý tên tùy chỉnh được thực hiện trong Delphi mà tôi sử dụng để tải các tệp vào thành phần webbrowser.Cách miễn phí TOleStream trong bit mã này
Datastream:IStream; var F: TFileStream; Dummy: INT64; begin F:=TFileStream.Create(strfilename fmOpenRead); CreateStreamOnHGlobal(0, True, DataStream); TOleStream.Create(DataStream).CopyFrom(F, F.Size); DataStream.Seek(0, STREAM_SEEK_SET, Dummy); TotalSize := F.Size; F.Free; end;
Vấn đề là Fastmm4 đưa ra lỗi rò rỉ bộ nhớ khi chương trình kết thúc và nói rằng TOleStream không được giải phóng. Làm thế nào để giải phóng nó? Nếu tôi đặt TOleStream trong một biến và gán như thế này
var TOS:TOleStream; TOS:=TOleStream.Create(DataStream) TOS.CopyFrom(F, F.Size); .. TOS.Free; End;
tôi nhận được một lỗi (EAccessViolation trỏ đến TComObject.ObjRelease trong ComObj) cuối cùng khi tôi giải phóng biến TOS. Tôi sẽ đánh giá cao ý kiến của bạn và giúp đỡ. Vấn đề này đã làm tôi lo lắng một lúc rồi.
Tôi cũng tự hỏi nếu nó có thể là một cái gì đó với FastMM4? Nó có thể cung cấp thông tin sai lệch không? Trong một chút mã như sau. TOLEStream được giải phóng như thế nào?
f.SaveToStream(TOleStream.Create(DataStream));
Và có cách nào để gửi dữ liệu đến luồng dữ liệu mà không sử dụng TFileStream không?
Hi Remy, Bạn có thể tìm thấy một dự án trình diễn làm việc của trình xử lý không gian tên với fastmm và thủ tục vấn đề ở đây: http://mode5.webs.com/namespace.7z Khi tải dự án, bấm vào nút để có xử lý namespace tải các tập tin. Khi bạn thoát, bạn sẽ nhận được lỗi fastmm. Trân trọng,
Xin chào, Chế độ, chào mừng bạn đến với StackOverflow. Đó là một câu hỏi khá hay, nhưng nó sẽ giúp ích nếu chúng tôi biết lỗi bạn nhận được khi bạn giải phóng nó. Bạn có thể chỉnh sửa câu hỏi của bạn và sao chép lỗi bạn nhận được vào đây cho chúng tôi không? Cảm ơn. –
FastMM không sai. Bạn đang cố gắng làm gì? Tải một tập tin vào một IStream và làm điều gì đó với nó? Tệp có nên được sửa đổi hoặc bạn có muốn nó chỉ đọc không? –