SccAddFromScc 関数
この関数では、ソース管理システムに既に存在するファイルをユーザーが参照し、そのファイルを現在のプロジェクトの一部として含めることができます。 たとえば、この関数では、ファイルをコピーすることなく、共通のヘッダー ファイルを現在のプロジェクトに取得できます。 返されるファイルの配列 lplpFileNames
には、ユーザーが IDE プロジェクトに追加するファイルのリストが含まれています。
構文
SCCRTN SccAddFromScc (
LPVOID pvContext,
HWND hWnd,
LPLONG lpnFiles,
LPCSTR** lplpFileNames
);
パラメーター
pvContext
[入力] ソース管理プラグインのコンテキスト構造体。
hWnd
[入力] ソース管理プラグインが、提供するすべてのダイアログ ボックスの親として使用できる IDE ウィンドウへのハンドル。
lpnFiles
[入力、出力] 追加されるファイルの数のバッファー。 (これは、lplpFileNames
で指し示されているメモリが解放される場合は NULL
です。詳細については、「備考」を参照してください)。
lplpFileNames
[入力、出力] ディレクトリ パスのない、すべてのファイル名へのポインターの配列。 この配列は、ソース管理プラグインによって割り当ておよび解放が行われます。 lpnFiles
= 1 で、lplpFileNames
が NULL
ではない場合、lplpFileNames
によって指されている配列の最初の名前には追加先のフォルダーが含まれています。
戻り値
この関数のソース管理プラグインの実装では、次のいずれかの値が返されることが予期されています。
値 | 説明 |
---|---|
SCC_OK | ファイルが正常に検出され、プロジェクトに追加されました。 |
SCC_I_OPERATIONCANCELED | 操作が取り消されました。追加は行われません。 |
SCC_I_RELOADFILE | ファイルまたはプロジェクトを再度読み込む必要があります。 |
解説
IDE によってこの関数が呼び出されます。 ソース管理プラグインでローカルの出力先フォルダーの指定がサポートされる場合、IDE では lpnFiles
= 1 を渡し、ローカル フォルダー名を lplpFileNames
に渡します。
SccAddFromScc
関数への呼び出しが戻ると、プラグインによって lpnFiles
と lplpFileNames
に値が割り当てられ、必要に応じてファイル名配列のメモリが割り当てられます (この割り当てによって lplpFileNames
のポインターが置き換えられることに注意してください)。 ソース管理プラグインは、すべてのファイルをユーザーのディレクトリまたは指定された追加先フォルダーに配置する役割を担います。 その後、IDE によって、IDE プロジェクトにファイルが追加されます。
最後に、IDE によってこの関数の 2 回目の呼び出しが行われます (lpnFiles
に NULL
が渡されます)。 これは、lplpFileNames``.
のファイル名配列に割り当てられたメモリを解放するために、ソース管理プラグインによって特別なシグナルとして解釈されます
lplpFileNames
は char ***
ポインターです。 ソース管理プラグインによって、ファイル名へのポインターの配列へのポインターが配置されるため、この API の標準的な方法でリストが渡されます。
Note
VSSCI API の初期バージョンでは、追加されたファイルのターゲットプロジェクトを示す方法が提供されていませんでした。 これに対応するために、lplpFIleNames
パラメーターのセマンティクスが拡張され、出力パラメーターではなく入力/出力パラメーターにされました。 1 つのファイルのみが指定された場合 (つまり、lpnFiles
= 1 によって指されている値)、lplpFileNames
の最初の要素にはターゲット フォルダーが含まれています。 これらの新しいセマンティクスを使用するために、IDE は SccSetOption
関数を呼び出し、 nOption
パラメーターを SCC_OPT_SHARESUBPROJ
に設定します。 ソース管理プラグインでこのセマンティクスがサポートされない場合は、SCC_E_OPTNOTSUPPORTED
が返されます。 これにより、ソース管理からの追加機能の使用が無効になります。 プラグインでソース管理からの追加機能 (SCC_CAP_ADDFROMSCC
) がサポートされる場合は、新しいセマンティクスをサポートし、SCC_I_SHARESUBPROJOK
が返される必要があります。