我有一個主要的應用程序和一個類型庫包含2個COM對象,一個是IFile,一個是IFiles。 IFiles創建IFile,並將它們存儲在TLIST中,並具有標準方法,如Add,Remove等.File和IFiles都是TAutoObject。不知何故COM對象實例丟失
在IFiles中的「添加」方法工作正常,它只是創建IFile對象[代碼1],並將其添加到TList。問題是IFile對象實例以非常奇怪的方式丟失。見[代碼2]
[代碼1]
function IFiles.Add(AFilename: String): IFile;
begin
Result := CoIFile.Create;
Result.Filename := AFilename;
// ShowMessage(IntToStr(Result._AddRef));
fFiles.Add(@Result);
end;
在主應用程序我有測試這樣的代碼。 [代碼2]
var
i: Integer;
f: IFile;
Files: IFiles;
begin
Files := CoTIFile.Create;
for i:= 1 to 4 do
begin
// Create a dummy file object
f := Files.Add('Filename ' + IntToStr(i));
f._AddRef; // Not sure if AddRef works like this
// Prints out the last file
Memo1.Lines.Add(Files.Files[i-1].Filename);
end;
for i:= 0 to Files.Count-1 do
begin
f := Files.Files[i];
// F is nil at all time.
if (f<>nil) then Memo1.Lines.Add(f.Filename); // ! No print out.
end;
end;
從第二環路,儘管fFiles.Count = 4,但所有內容已丟失。在IFile中我需要一些額外的處理來處理AddRef和Release嗎?或者我寫的IFiles.Add方法是錯誤的?
啊哈。 TInterfaceList。 – Darkerstar 2009-04-08 06:34:31