比較這兩個片段:爲什麼這個TStreamAdapter沒有發佈?
(d as IPersistStream).Save(
TStreamAdapter.Create(
TFileStream.Create('test.bin',fmCreate),soOwned),true);
(d as IPersistStream).Load(
TStreamAdapter.Create(
TFileStream.Create('test.bin',fmOpenRead),soOwned));
這未能在第二TFileStream.Create
因爲第一個不被破壞。這很奇怪,因爲這個參數只有一個參考,我認爲它會在關閉Save
時被破壞。所以我試過這個:
var
x:IStream;
begin
x:=TStreamAdapter.Create(
TFileStream.Create('test.bin',fmCreate),soOwned);
(d as IPersistStream).Save(x,true);
x:=nil;
x:=TStreamAdapter.Create(
TFileStream.Create('test.bin',fmOpenRead),soOwned);
(d as IPersistStream).Load(x);
x:=nil;
哪個工作正常。 (但再次失敗,而不x:=nil;
)所以不要擔心d
,它是一個IPersistStream
和正確行爲。爲什麼需要明確的nil
分配來強制撥打_Release
?這是Delphi 7的一個已知問題嗎?是因爲鏈接器/編譯器開關?
這本來是真的很容易做出的SSCCE。現在我必須這樣做。其他任何想要運行代碼的人也是如此。事實上,我不確定我會不會受到困擾。你不能這樣做嗎?其實,我知道答案沒有任何運行。你好幸運啊! –
請參閱我在每個SO問題中所學到的東西。不瞭解SSCCE。我的基於https://github.com/stijnsanders/TMongoWire/blob/master/bsonDoc.pas在這裏看到https://gist.github.com/stijnsanders/9960826 –
我已經添加了一個SSCCE到我的答案。 –