2010-12-14 16 views
6

Bu, Delphi'de yapılan bir özel ad işleyicisinden dosyaları webbrowser bileşenine yüklemek için kullanıyorum.Bu bit kodunda TOleStream nasıl kullanılır

 

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; 

sorun programın bitip TOleStream serbest olmadığını söylerken Fastmm4 bir bellek sızıntısı hata veriyor olmasıdır. Nasıl serbestlerim? Bir değişkende TOleStream koymak ve bu

 
var 
TOS:TOleStream; 

TOS:=TOleStream.Create(DataStream) 
TOS.CopyFrom(F, F.Size); 

.. 
TOS.Free; 
End; 

gibi atarsanız ben TOS değişkeni serbest zaman sonunda bir hata (EAccessViolation ComObj içinde TComObject.ObjRelease işaret) olsun. Yorumlarınızı ve yardımlarınızı takdir ediyorum. Bu problem bir süredir beni rahatsız ediyor.

Ayrıca FastMM4 ile bir şey olup olmadığını merak ediyorum? Yanlış bilgi veriyor olabilir mi? Aşağıdaki gibi bir kodda. TOLEStream tipik olarak nasıl serbest kalır?

 
f.SaveToStream(TOleStream.Create(DataStream)); 

Veri akışına TFileStream kullanmadan veri yollamanın bir yolu var mı?

Merhaba Remy, Sen fastmm ve buradaki sorun usulüne ad işleyici bir çalışma demo proje bulabilirsiniz: Proje yükleri, ad işleyicisi dosyaları yüklemek için butonuna tıklayın http://mode5.webs.com/namespace.7z . Çıktığınızda, fastmm hatasını almalısınız. Saygılarımızla

+2

Merhaba, Mode, StackOverflow'a hoş geldiniz. Bu oldukça iyi bir soru, ama özgür olduğunuzda aldığınız hatanın ne olduğunu bilseydik yardımcı olur. Sorunuzu düzenleyebilir ve sizin için buraya girdiğiniz hatayı kopyalayabilir misiniz? Teşekkürler. –

+0

FastMM yanlış değil. Tam olarak ne yapmaya çalışıyorsun? Bir dosyayı bir IStream'e yükleyin ve onunla bir şeyler yapın? Dosya değiştirilmeli mi yoksa okuyuculu mu? –

cevap

3

Bir şey ıstream arabirim geçmesi gerekiyorsa, sen, sen, TFileStream üzerinde bir tane oluşturabilirsiniz TStreamAdapter nesnesine içine bakmak ve Istream arayüzünü geçmelidir.

+0

Teşekkürler Stijn, bunu denemek için gidiyorum – Mode

+0

Teşekkürler Stijn, Biraz detaylandırır mısınız? Datastream'i kullanmaya çalıştığımda: = TStreamadapter.create (f, soOwned); Fastmm4, serbest bir nesnenin bir arayüzünü kullanmaya çalıştığımı söyleyen bir hata atar. Bazı demo kodları yardımcı olabilir. Tekrar teşekkürler. – Mode

+0

"Bir web tarayıcısı bileşenine dosya yüklemek için kullandığım Delphi'de yapılan özel isim işleyici işleyicisi" ile ne demek istediğimi anlayamadım. Özel bir ad alanı işleyicisinin web gezgini içeriğini yüklemenin en iyi yolu olduğunu düşünmüyorum. IInternetProtocol var, ama bu kendini uygulamak için çok iş var, biliyorum çünkü burada denedim: http://xxm.sf.net/ –

İlgili konular