建立專案的執行個體,藉由使用專案工廠
專案中的型別Visual Studio使用專案工廠來建立專案物件的執行個體。 專案工廠很類似 cocreatable 的 COM 物件的標準類別工廠的。 但是,並非 cocreatable 專案的物件: 只可以建立使用專案處理站。
Visual Studio IDE 會呼叫在使用者載入現有的專案,或建立新的專案中時,在您的 VSPackage 實作專案工廠Visual Studio。 新的專案物件提供 IDE,具有足夠的資訊來填入 [方案總管] 中。 新的專案物件也會提供所需的介面支援所有相關的 UI 動作啟動 ide。
您可以實作IVsProjectFactory在專案中的類別中的介面。 一般而言,它會保留在自己的模組。
如需範例之實作的IVsProjectFactory介面資訊,請參閱位於的 PrjFac.cpp Basic Project範例目錄。
正在進行彙總之由擁有者所支援的專案必須保存在其專案檔案的擁有者金鑰。 當CreateProject專案上呼叫方法以擁有者的金鑰、 附屬的專案將專案工廠 GUID 接著會呼叫它的擁有者識別碼CreateProject方法以執行實際建立此專案處理站。
建立擁有的專案
在一位擁有人擁有的專案中建立兩個階段:
藉由呼叫 PreCreateForOwner 方法。 這可讓擁有的專案機會建立彙總的專案物件根據輸入的控制IUnknown。 擁有的專案通過內部IUnknown和彙總的物件傳回給擁有者的專案。 這會讓擁有的專案有機會來儲存內部IUnknown。
藉由呼叫 InitializeForOwner 方法。 擁有的專案不會其所有的執行個體化,而非電話呼叫這個方法IVsProjectFactory::CreateProject ,就可能發生的情況為自己尚未擁有的專案。 輸入VSOWNEDPROJECTOBJECT列舉型別通常是彙總的附屬的專案。 擁有的專案可以使用這個變數,以判斷是否已建立其專案物件 (cookie 不等於 NULL) 或必須建立 (cookie 等於 NULL)。
唯一的專案 GUID,類似於 cocreatable 的 COM 物件的 CLSID 來識別專案類型。 一般而言,一個專案建立的單一專案類型、 執行個體,雖然您可以有一個專案工廠的工廠控點會處理多個專案類型的 GUID。
專案類型都與特定的副檔名相關聯。 當使用者嘗試開啟現有的專案檔案,或嘗試由複製的範本來建立新的專案時,則 IDE 會使用該檔案副檔名來判斷對應的專案 GUID。
IDE 會決定是否必須建立新的專案或開啟現有專案的特定型別,IDE 會使用中的資訊如 [HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\8.0\Projects] 找出哪一個 VSPackage 的系統登錄會實作必要的專案工廠。 IDE 載入此 VSPackage。 在SetSite方法中,VSPackage 必須登錄其專案與 IDE 藉由呼叫RegisterProjectType方法。
主要的方法IVsProjectFactory介面是CreateProject它應該處理兩個案例: 開啟現有的專案,並建立新的專案。 大部分的專案會將專案狀態儲存在專案檔中。 一般而言,新的專案由的製作一份範本檔傳遞至CreateProject方法,然後開啟 [複本。 現有的專案會具現化藉由直接開啟專案檔傳遞至CreateProject方法。 CreateProject方法可依需要對使用者顯示額外的 UI 功能。
專案可以也不使用檔案,相反地,其專案狀態儲存在檔案系統,例如資料庫或 Web 伺服器以外的儲存機制。 如此一來,檔案名稱參數傳遞至CreateProject方法不是實際檔案系統路徑,而是唯一的字串 — URL,來識別專案資料。 您不需要複製範本檔案傳遞給CreateProject來觸發執行適當的建構序列。