我有一個用Delphi 7編寫的程序,它也是一個自動化服務器。自動化服務器與CreateOleObject啓動兩次,但不是所有的時間
自動化服務器註冊方式如下:
TAutoObjectFactory.Create(ComServer, TMyServer, Class_App,
ciMultiInstance, tmSingle);
我有兩個COM加載項,一個字,一個用於Outlook。他們都使用自動化服務器從主程序獲取一些信息。下面的代碼是從加載項,即:被稱爲當用戶點擊加載項按鈕:
MyServerApp: Variant;
begin
MyServerApp := CreateOleObject('MyServer.App');
try
MyServerApp.DoSomething;
finally
MyServerApp := UnAssigned;
end–
這裏的問題是: 大部分時間的代碼工作正常。如果主應用程序已經運行,那麼加載項將連接到自動化服務器並執行它們的操作,如果它沒有運行,則加載項將啓動主應用程序。
但是由於一些未知的情況,特別是對於Outlook,有時候可能會發生這樣的情況,即使主程序正在運行,加載項也不會連接到它,而是將第二次重新啓動主應用程序並連接到這個新實例的自動化服務器。這次災難來了:由於我的應用程序不允許它在兩個實例中運行,第二個應用程序實例將只顯示一條錯誤消息,我的加載項將凍結整個Outlook。
爲什麼會發生這種情況?爲什麼CreateOleObject會在大多數時間連接它,並不時重新啓動我的應用程序?
什麼版本的Windows?我在XP中看到類似這樣的問題,但從未在Windows 7或Vista或Win8中看到這樣的問題。 –
這是Windows 7與Outlook2010,但我記得看到與不同的Win和Outlook版本的錯誤。 – Steve