公開專案物件
自訂專案類型可以提供自動化物件,以允許使用自動化介面存取專案。 每個專案類型都預期會提供從 Solution 存取的標準 Project 自動化物件,其中包含在 IDE 中開啟之所有專案的集合。 專案中的每個項目都應該由使用 Project.ProjectItems
存取的 ProjectItem 物件公開。 除了這些標準自動化物件之外,專案還可以選擇提供專案特定的自動化物件。
您可以建立自訂根層級自動化物件,以使用 DTE.<customObjectName>
或 DTE.GetObject("<customObjectName>")
從根 DTE 物件存取晚期繫。 例如,Visual C++ 會建立名為 VCProjects 的 C++ 專案特定專案集合,您可以使用 DTE.VCProjects
或 DTE.GetObject("VCProjects")
存取專案集合。 您還可以建立對於專案類型來說是唯一的 Project.Object
、可以查詢其最高衍生物件的 Project.CodeModel
以及 ProjectItem
(公開 ProjectItem.Object
和 ProjectItem.FileCodeModel
)。
專案通常公開自訂的、特定於專案的專案集合。 例如,Visual C++ 會建立 C++ 特定的專案集合,然後您可以使用 或 DTE.VCProjects
或 DTE.GetObject("VCProjects")
來存取。 您還可以建立對於專案類型來說是唯一的 Project.Object
、可以查詢其最高衍生物件的 Project.CodeModel
、ProjectItem
(公開 ProjectItem.Object
和 ProjectItem.FileCodeModel
)。
為專案提供 VSPackage 特定物件
將適當的金鑰新增至 VSPackage 的 .pkgdef 檔案。
例如,以下是 C++ 語言專案的 .pkgdef 設定:
[$RootKey$\Packages\{F1C25864-3097-11D2-A5C5-00C04F7968B4}\Automation] "VCProjects"="" [$RootKey$\Packages\{F1C25864-3097-11D2-A5C5-00C04F7968B4}\AutomationEvents] "VCProjectEngineEventsObject"=""
實作 GetAutomationObject 方法中的程式碼,如下列範例所示。
STDMETHODIMP CVsPackage::GetAutomationObject( /* [in] */ LPCOLESTR pszPropName, /* [out] */ IDispatch ** ppIDispatch) { ExpectedPtrRet(pszPropName); ExpectedPtrRet(ppIDispatch); *ppIDispatch = NULL; if (m_fZombie) return E_UNEXPECTED; if (_wcsicmp(pszPropName, g_wszAutomationProjects) == 0) { return GetAutomationProjects(ppIDispatch); } else if (_wcsicmp(pszPropName, g_wszAutomationProjectsEvents) == 0) { return CAutomationEvents::GetAutomationEvents(ppIDispatch); } else if (_wcsicmp(pszPropName, g_wszAutomationProjectItemsEvents) == 0) { return CAutomationEvents::GetAutomationEvents(ppIDispatch); } return E_INVALIDARG; }
在程式代碼中,
g_wszAutomationProjects
是專案集合的名稱。GetAutomationProjects
方法建立一個實作Projects
介面的物件,並傳回呼叫物件的指標IDispatch
,如下列程式碼範例所示。HRESULT CVsPackage::GetAutomationProjects(/* [out] */ IDispatch ** ppIDispatch) { ExpectedPtrRet(ppIDispatch); *ppIDispatch = NULL; if (!m_srpAutomationProjects) { HRESULT hr = CACProjects::CreateInstance(&m_srpAutomationProjects); IfFailRet(hr); ExpectedExprRet(m_srpAutomationProjects != NULL); } return m_srpAutomationProjects.CopyTo(ppIDispatch); }
為自動化物件選擇唯一的名稱。 名稱衝突是無法預測的,如果多個專案類型使用相同的名稱,衝突會導致任意擲回衝突的物件名稱。 在自動化物件名稱中應包含公司名稱或其產品名稱的某些獨特層面。
自訂
Projects
集合物件是專案自動化模型其餘部分的便利進入點。 您也可以從 Solution 專案集合存取您的專案物件。 建立為使用者提供Projects
集合物件的適當程式碼和登錄項目後,您的實作必須為專案模型提供其餘的標準物件。 如需詳細資訊,請參閱專案模型化。