次の方法で共有


ソース管理プラグインを実装するためのベスト プラクティス

次の技術的な詳細は、Visual Studio でソース管理プラグインを確実に実装するのに役立ちます。

メモリ管理の問題

ほとんどの場合、統合開発環境 (IDE) は呼び出し元であり、メモリを解放して割り当てます。 ソース管理プラグインは、呼び出し元によって割り当てられたバッファー内の文字列やその他の項目を返します。 例外は、発生する特定の関数の説明に記載されています。

ファイル名の配列

ファイルの配列が渡されると、ファイル名の連続した配列として渡されません。 ファイル名へのポインターの配列として渡されます。 たとえば、 SccGet では、ファイル名は lpFileNames パラメーターによって渡されます。ここで、 lpFileNames は実際には char **へのポインターです。 lpFileNames[0] は名へのポインター、 lpFileNames[1] は 2 番目の名前へのポインターなどです。

大規模なモデル

16 ビット オペレーティング システムの場合でも、すべてのポインターは 32 ビットです。

完全修飾パス

ファイル名またはディレクトリを引数として指定する場合は、末尾の円記号を使用せずに、完全修飾パスまたは UNC パスにする必要があります。 基になるソース管理システムの要件である場合は、ソース管理プラグインがこれらを相対パスに変換する必要があります。

登録済み DLL の完全修飾パスを指定する

IDE は相対パス (. \NewProvider.dllなど) から DLL を読み込めなくなりました。 DLL の完全なパスを指定する必要があります (たとえば、 C:\Providers\NewProvider.dll)。 この要件により、承認されていないまたは偽装されたソース管理 DLL の読み込みを防ぐことで、IDE のセキュリティが強化されます。

ソース管理プラグインをインストールするときに、既存の VSSCI プラグインを確認する

ソース管理プラグインをインストールする予定のユーザーは、コンピューターに既存のソース管理プラグインが既にインストールされている可能性があります。 作成するプラグインのインストール (セットアップ) プログラムによって、関連するレジストリ キーに既存の値があるかどうかを判断する必要があります。 これらのキーが既に設定されている場合、インストール プログラムは、プラグインを既定のソース管理プラグインとして登録し、既にインストールされているプラグインを置き換えるかどうかをユーザーに求める必要があります。

エラー結果コードとレポート

ソース管理関数の SCC_OK リターン コードは、すべてのファイルに対して操作が成功したことを示します。 操作が失敗した場合は、最後に発生したエラー コードが返されることが予想されます。

レポートのルールは、IDE でエラーが発生した場合、IDE がエラーを報告する必要があるということです。 ソース管理システムでエラーが発生した場合は、ソース管理プラグインによって報告が行われます。 たとえば、 現在選択されているファイルは IDE によって報告されませんが、 このファイルは既にチェックアウトされていますが 、プラグインによって報告されます。

コンテキスト構造

SccInitialize の呼び出し中に、呼び出し元は、初期化されていないハンドルである ppvContext パラメーターを void に渡します。 ソース管理プラグインは、このパラメーターを無視することも、任意の種類の構造体を割り当てて、渡されたポインターにその構造体へのポインターを配置することもできます。 IDE はこの構造を理解しませんが、プラグイン内の他のすべての呼び出しにこの構造体へのポインターを渡します。 これにより、グローバル変数を使用せずに関数呼び出し間で保持されるグローバル状態情報を保持するために使用できる、プラグインに貴重なコンテキスト キャッシュ情報が提供されます。 プラグインは、 SccUninitialize の呼び出しで構造体を解放する役割を担います。

プラグインが SCC_CAP_REENTRANT (具体的には、 パラメーター) のlpSccCaps ビットを設定する場合、開いているすべてのプロジェクトを追跡するために複数のコンテキスト構造が使用されます。

Bitflags とその他のコマンド オプション

SccGet などのコマンドごとに、コマンドの動作を変更する多くのオプションを IDE で指定できます。

API では、 fOptions パラメーターを使用した IDE による特定のオプションの設定がサポートされています。 これらのオプションについては、 特定のコマンドで使用されるビットフラグ と、影響を受けるコマンドについて説明します。 一般に、これらはユーザーにプロンプトが表示されないオプションです。

ほとんどのユーザー構成可能な設定オプションは、ソース管理プラグインによって大きく異なるため、この方法では定義されません。そのため、推奨されるメカニズムは [詳細設定] ボタンです。 たとえば、[ 取得 ] ダイアログ ボックスでは、IDE では理解できる情報のみが表示されますが、プラグインにこのコマンドのオプションがある場合は [詳細設定 ] ボタンも表示されます。 ユーザーが [詳細設定 ] ボタンをクリックすると、IDE は SccGetCommandOptions を呼び出して、ソース管理プラグインがビットフラグや日付/時刻などの情報をユーザーに求めるメッセージを表示できるようにします。 プラグインは、この情報をSccGetコマンド中に返される構造体として提供します。