共用方式為


實作原始檔控制外掛程式的最佳做法

下列技術細節可協助您可靠地在 Visual Studio 中實作原始檔控制外掛程式。

記憶體管理問題

在大部分情況下,整合式開發環境 (IDE) (即呼叫端) 會釋放並配置記憶體。 原始檔控制外掛程式會傳回呼叫端配置的緩衝區中的字串和其他項目。 特定函式的描述中會指出發生例外狀況的位置。

檔案名稱的陣列

傳遞檔案陣列時,不會以連續的檔名陣列的形式傳遞, 而會當做檔名指標來傳遞。 例如,在 SccGet 中,檔名會由 lpFileNames 參數傳遞,其中 lpFileNames 實際上是 char ** 的指標。 lpFileNames[0] 是第一個名稱的指標,lpFileNames[1] 是第二個名稱的指標,依此類推。

大型模型

所有指標都是 32 位元,即使在 16 位元作業系統上也是如此。

完整路徑

當檔名或目錄指定為引數時,它們必須是完整路徑或 UNC 路徑,結尾沒有反斜線。 如果這是基礎原始檔控制系統的需求,則原始檔控制外掛程式有責任將這些內容轉譯為相對路徑。

指定已註冊 DLL 的完整路徑

IDE 不再從相對路徑載入 DLL (例如 .\NewProvider.dll)。 必須指定 DLL 的完整路徑 (例如 C:\Providers\NewProvider.dll)。 這項需求可藉由防止載入未經授權的或模擬的原始檔控制 DLL,而強化 IDE 的安全性。

當您安裝原始檔控制外掛程式時,請檢查現有的 VSSCI 外掛程式

計劃安裝原始檔控制外掛程式的使用者可能已在電腦上安裝現有的原始檔控制外掛程式。 您所建外掛程式的安裝程式應判斷相關登錄機碼是否有現有值。 如果已經設定這些機碼,您的安裝程式應該詢問使用者是否要將外掛程式註冊為預設原始檔控制外掛程式,並取代已安裝的外掛程式。

錯誤結果碼和報告

原始檔控制函式的 SCC_OK 傳回碼表示所有檔案的作業皆已成功。 如果作業失敗,預期會傳回最後發生的錯誤碼。

報告的規則是,如果 IDE 發生錯誤,IDE 會負責報告錯誤。 如果原始檔控制系統中發生錯誤,原始檔控制外掛程式會負責報告錯誤。 例如,「目前未選取任何檔案」會由 IDE 報告,而「此檔案已簽出」 會由外掛程式報告。

內容結構

在呼叫 SccInitialize 期間,呼叫端會將 ppvContext 參數 (未初始化的控制代碼) 傳遞至 void。 原始檔控制外掛程式可以忽略此參數,也可以配置任何類型的結構,並將該結構的指標放入傳遞的指標中。 IDE 並不了解此結構,但它會將此結構的指標傳遞至外掛程式中的其他每個呼叫。 這會為外掛程式提供寶貴的內容快取資訊,可用來維護全域狀態資訊,以保存於函式呼叫之間,而無須使用全域變數。 外掛程式負責在呼叫 SccUninitialize 時釋放結構。

如果外掛程式在 SccInitialize 中 (特別是在 lpSccCaps 參數中) 設定 SCC_CAP_REENTRANT 位元,則會使用多個內容結構來追蹤所有開啟的專案。

Bitflags 和其他命令選項

對於每個命令,例如 SccGet,IDE 可以指定許多選項來變更命令的行為。

API 支援透過 fOptions 參數由 IDE 設定特定選項。 特定命令所使用的 Bitflags 中描述了這些選項,以及它們所影響的命令。 一般而言,這些是不會提示使用者的選項。

大部分的使用者可設定的設定選項都不會以這種方式定義,因為它們在原始檔控制外掛程式之間有很大的差異。因此,建議的機制是 [進階] 按鈕。 例如,在 [取得] 對話方塊中,IDE 只會顯示它了解的資訊,但如果外掛程式有此命令的選項,它也會顯示 [進階] 按鈕。 當使用者按一下 [進階] 按鈕時,IDE 會呼叫 SccGetCommandOptions,讓原始檔控制外掛程式提示使用者輸入資訊,例如 bitflags 或日期/時間。 外掛程式會在 SccGet 命令期間傳回的結構中傳回這項資訊。