यह डेल्फी में किए गए कस्टम नेमस्पेसर हैंडलर से है जो मैं वेबब्रोसर घटक में फ़ाइलों को लोड करने के लिए उपयोग करता हूं।कोड के इस बिट में टोलस्ट्रीम को कैसे मुक्त करें
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;
समस्या है जब कार्यक्रम समाप्त हो जाती है और कहता है कि TOleStream मुक्त नहीं किया गया था कि Fastmm4 एक स्मृति रिसाव त्रुटि देता है। मैं इसे कैसे मुक्त करूं? अगर मैं एक चर में TOleStream रख दिया और इस
var TOS:TOleStream; TOS:=TOleStream.Create(DataStream) TOS.CopyFrom(F, F.Size); .. TOS.Free; End;
की तरह आवंटित मैं टीओएस चर मुक्त कर जब मैं एक अंत में त्रुटि (EAccessViolation ComObj में TComObject.ObjRelease की ओर इशारा करते) मिलता है। मैं आपकी टिप्पणियों और सहायता की सराहना करता हूं। यह समस्या मुझे थोड़ी देर के लिए परेशान कर रही है।
मैं यह भी सोच रहा हूं कि यह FastMM4 के साथ कुछ हो सकता है? क्या यह झूठी सूचना दे सकता है? निम्नलिखित कोड जैसे कुछ कोड में। आमतौर पर TOLEStream कैसे मुक्त किया जाता है?
f.SaveToStream(TOleStream.Create(DataStream));
और क्या TFileStream का उपयोग किए बिना डेटास्ट्रीम को डेटा भेजने का कोई तरीका है?
हाय रेमी, आप fastmm और समस्या प्रक्रिया यहाँ के साथ नाम स्थान हैंडलर की एक काम डेमो परियोजना पा सकते हैं: http://mode5.webs.com/namespace.7z जब इस परियोजना लोड, नाम स्थान हैंडलर फ़ाइलें लोड करने के लिए बटन क्लिक करें। जब आप बाहर निकलते हैं, तो आपको फास्टम त्रुटि मिलनी चाहिए। सधन्यवाद,
हाय, मोड, StackOverflow में आपका स्वागत है। यह एक बहुत अच्छा सवाल है, लेकिन अगर हम जानते हैं कि आपको मुफ्त में क्या त्रुटि मिलती है तो इससे मदद मिलेगी। क्या आप अपना प्रश्न संपादित कर सकते हैं और उस त्रुटि की प्रतिलिपि बना सकते हैं जो आप यहां हमारे लिए प्राप्त करते हैं? धन्यवाद। –
फास्टएमएम गलत नहीं है। आप वास्तव में क्या करने की कोशिश कर रहे हैं? एक फ़ाइल को एक आईएसट्रीम में लोड करें और इसके साथ कुछ करें? क्या फ़ाइल को संशोधित किया जाना चाहिए या क्या आप इसे पढ़ना चाहते हैं? –