使用COM接口
1. 找到接口描述文件COMAdmin_TLB.pas
還是用了個笨辦法,新建一個ActiveX Library,再新建一個COM Object,隨便起個名字吧。保存。
然後選菜單VIEw->Type Library,在右邊Uses頁中點右鍵,選擇查看所有類型庫,找到COM+1.0 Admin Type Library,保存。OK,在你的保存目錄下有了一個COMAdmin_TLB.pas,拷出來,其它的可以刪除啦:)
2. 我們來刪除一個COM+應用程序
新建一個Delphi工程,保存。添加我們剛才生成的COMAdmin_TLB.pas,別忘了uses啊:)
在COMAdmin_TLB.pas中一共有三個接口,看名字大概能猜出幾分
ICOMAdminCatalog 管理COM+目錄的接口
ICatalogObject COM+對象的接口
ICatalogCollection COM+對象集合的接口
procedure TForm1.Button1Click(Sender: TObject);
var
temp:IDispatch;
i:integer;
CataColl:ICatalogCollection;
CataObj:ICatalogObject;
COMADminCata:ICOMAdminCatalog;
begin
file://先創建一個ICOMAdminCatalog的接口指針,用於
self.COMADminCata := CoCOMAdminCatalog.Create;
file://取得ICatalogCollection的接口指針,指向的是COM+應用程序的集合,注意參數是
file://字符串,Delphi幫助中有這樣一段話:有效的集合依賴於你的COMAdmin Library的
file://版本,查看微軟的文檔來找到在你的COMAdmin Library版本中有效的集合
temp := self.COMADminCata.GetCollection('Applications');
self.CataColl := Iunknown(temp) as ICataLogCollection;
file://下一句不可少,執行了它才真正讀到的數據
self.CataColl.Populate;
file://來個循環查找並刪除,你可以新建一個叫aaa的COM+應用程序來進行測試,循環次
file://數為COM+應用程序的個數 –1,因為我們在循環中刪了一個COM+應用程序
for i := 0 to self.CataColl.Count - 2 do
begin
file://這是取第I個應用程序集合中的對象
self.CataObj := Iunknown(self.CataColl.Item[i]) as ICatalogObject;
file://你可以打出來名字看看和你在組件服務中的是否一樣
showmessage(self.CataObj.Name);
file://如果對象名字是aaa,那麼我們要進行刪除啦
if self.CataObj.Name = 'aaa' then
begin
self.CataColl.Remove(i);
file://下一句有點像提交事務,如果你不寫,是不會真正刪除的
self.CataColl.SaveChanges;
end;
end;
end;
使用Delphi控件
無意中點了一下幫助,居然發現Delphi有一個類將這些接口封裝了(Delphi就是好,呵呵)。好,我們就用這個控件封裝的類來實現刪除
類定義在CmAdmCtl中,在主窗體中uses一下即可
對應於前面描述的COM接口,Delphi為我們封裝了三個類
TCOMAdminCatalog = class(TOleServer)
TCOMAdminCatalogObject = class(TOleServer)
TCOMAdminCatalogCollection = class(TOleServer)
有了前面的描述,第二個程序好寫多了
procedure TForm1.Button2Click(Sender: TObject);
var
CataColl:TCOMAdminCatalogCollection;
CataObj:TCOMAdminCatalogObject;
COMADminCata:TCOMAdminCatalog;
i:integer;
begin
COMADminCata := TCOMAdminCatalog.Create(self);
CataColl := COMADminCata.GetCollection('Applications');
CataColl.Populate;
for i := 0 to CataColl.Count - 2 do
begin
CataObj := CataColl.Get_Item(i);
showmessage(CataObj.Name);
if CataObj.Name = 'aaa' then
begin
CataColl.Remove(i);
CataColl.SaveChanges;
end;
end;
COMADminCata.Free;
end;
還有很多功能,比如導出應用程序,安裝應用程序等等操作,函數名寫的很清楚,具體可以看Delphi的幫助