다음을 통해 공유


SccOpenProject 함수

이 함수는 기존 소스 제어 프로젝트를 열거나 새 프로젝트를 만듭니다.

구문

SCCRTN SccOpenProject (
   LPVOID        pvContext,
   HWND          hWnd,
   LPSTR         lpUser,
   LPCSTR        lpProjName,
   LPCSTR        lpLocalProjPath,
   LPSTR         lpAuxProjPath,
   LPCSTR        lpComment,
   LPTEXTOUTPROC lpTextOutProc,
   LONG          dwFlags
);

매개 변수

pvContext

[in] 소스 제어 플러그 인 컨텍스트 구조입니다.

hWnd

[in] 소스 제어 플러그 인이 제공하는 대화 상자의 부모로 사용할 수 있는 IDE 창에 대한 핸들입니다.

lpUser

[in, out] 사용자 이름(NULL 종결자를 포함하여 SCC_USER_SIZE를 초과하지 않음)입니다.

lpProjName

[in] 프로젝트 이름을 식별하는 문자열입니다.

lpLocalProjPath

[in] 프로젝트의 작업 폴더에 대한 경로입니다.

lpAuxProjPath

[in, out]프로젝트를 식별하는 선택적 보조 문자열(NULL 종결자를 포함하여 SCC_AUXPATH_SIZE를 초과하지 않음)입니다.

lpComment

[in] 생성 중인 새 프로젝트에 주석을 추가합니다.

lpTextOutProc

[in] 소스 제어 플러그 인의 텍스트 출력을 표시하는 선택적 콜백 함수입니다.

dwFlags

[in] 프로젝트를 소스 제어 플러그 인에서 알 수 없는 경우 새 프로젝트를 만들어야 하는지 여부를 나타냅니다. 값은 SCC_OP_CREATEIFNEWSCC_OP_SILENTOPEN.의 조합일 수 있습니다.

Return Value

이 함수의 소스 제어 플러그 인 구현은 다음 값 중 하나를 반환해야 합니다.

Description
SCC_OK 프로젝트를 여는 데 성공했습니다.
SCC_E_INITIALIZEFAILED 프로젝트를 초기화할 수 없습니다.
SCC_E_INVALIDUSER 사용자가 소스 제어 시스템에 로그인할 수 없습니다.
SCC_E_COULDNOTCREATEPROJECT 호출 전에 프로젝트가 존재하지 않았습니다. SCC_OPT_CREATEIFNEW 플래그가 설정되었지만 프로젝트를 만들 수 없습니다.
SCC_E_PROJSYNTAXERR 프로젝트 구문이 잘못되었습니다.
SCC_E_UNKNOWNPROJECT 소스 제어 플러그 인에서 프로젝트를 알 수 없으며 SCC_OPT_CREATEIFNEW 플래그가 설정되지 않았습니다.
SCC_E_INVALIDFILEPATH 잘못되었거나 사용할 수 없는 파일 경로입니다.
SCC_E_NOTAUTHORIZED 사용자는 이 작업을 수행할 수 없습니다.
SCC_E_ACCESSFAILURE 네트워크 또는 경합 문제로 인해 소스 제어 시스템에 액세스하는 데 문제가 발생했습니다. 다시 시도하는 것이 좋습니다.
SCC_E_NONSPECFICERROR 불특정 오류입니다. 소스 제어 시스템이 초기화되지 않았습니다.

설명

IDE는 사용자 이름(lpUser)을 전달하거나 단순히 빈 문자열에 대한 포인터를 전달할 수 있습니다. 사용자 이름이 있으면 소스 제어 플러그 인은 이를 기본값으로 사용해야 합니다. 하지만 이름이 전달되지 않았거나 지정된 이름으로 로그인에 실패하면 플러그 인은 사용자에게 로그인하라는 메시지를 표시하고 유효한 로그인을 수신할 때 lpUser에 유효한 이름을 반환해야 합니다. 플러그 인은 사용자 이름 문자열을 변경할 수 있으므로 IDE는 항상 크기의 버퍼를 할당합니다(SCC_USER_LEN+1 또는 SCC_USER_SIZE, null 종결자를 위한 공간 포함).

참고 항목

IDE가 수행해야 할 수도 있는 첫 번째 작업은 SccOpenProject 함수 또는 SccGetProjPath에 대한 호출일 수 있습니다. 이러한 이유로 둘 다 동일한 lpUser 매개 변수를 갖습니다.

lpAuxProjPath 솔루션 lpProjName 파일에서 읽거나 함수 호출 SccGetProjPath 에서 반환됩니다. 이러한 매개 변수는 소스 제어 플러그 인이 프로젝트와 연결하는 문자열을 포함하며 플러그 인에만 의미가 있습니다. 이러한 문자열이 솔루션 파일에 없고 사용자에게 찾아보라는 메시지가 표시되지 않은 경우(SccGetProjPath 함수를 통해 문자열을 반환함) IDE는 lpAuxProjPathlpProjName 모두에 대해 빈 문자열을 전달하며 이 함수가 반환될 때 플러그 인이 이러한 값을 업데이트할 것으로 예상합니다.

lpTextOutProc는 명령 결과 출력을 표시하기 위해 IDE에서 소스 제어 플러그 인에 제공하는 콜백 함수에 대한 포인터입니다. 이 콜백 함수는 LPTEXTOUTPROC에 자세히 설명되어 있습니다.

참고 항목

소스 제어 플러그 인이 이를 활용하려면 SccInitialize에서 SCC_CAP_TEXTOUT 플래그를 설정해야 합니다. 해당 플래그가 설정되지 않았거나 IDE가 이 기능을 지원하지 않는 경우 lpTextOutProcNULL이 됩니다.

dwFlags 매개 변수는 열려 있는 프로젝트가 현재 존재하지 않는 경우 결과를 제어합니다. SCC_OP_CREATEIFNEWSCC_OP_SILENTOPEN이라는 두 개의 비트플래그로 구성됩니다. 열려 있는 프로젝트가 이미 존재하면 함수는 프로젝트를 열고 SCC_OK를 반환합니다. 프로젝트가 존재하지 않고 SCC_OP_CREATEIFNEW 플래그가 켜져 있으면 소스 제어 플러그 인은 소스 제어 시스템에서 프로젝트를 생성하여 열고 SCC_OK를 반환할 수 있습니다. 프로젝트가 존재하지 않고 SCC_OP_CREATEIFNEW 플래그가 꺼져 있으면 플러그 인은 SCC_OP_SILENTOPEN 플래그를 확인해야 합니다. 해당 플래그가 켜져 있지 않으면 플러그 인은 사용자에게 프로젝트 이름을 묻는 메시지를 표시할 수 있습니다. 해당 플래그가 켜져 있으면 플러그 인은 단순히 SCC_E_UNKNOWNPROJECT를 반환해야 합니다.

호출 순서

정상적인 이벤트 과정에서 SccInitialize는 먼저 호출되어 소스 제어 세션을 엽니다. 세션은 SccOpenProject에 대한 호출 및 다른 소스 제어 플러그 인 API 함수 호출로 구성될 수 있으며 SccCloseProject에 대한 호출로 종료됩니다. 이러한 세션은 SccUninitialize가 호출되기 전에 여러 번 반복될 수 있습니다.

소스 제어 플러그 인이 SccInitialize에서 SCC_CAP_REENTRANT 비트를 설정하면 위의 세션 시퀀스가 병렬로 여러 번 반복될 수 있습니다. 서로 다른 pvContext 구조는 각 pvContext가 한 번에 하나의 열린 프로젝트와 연결되는 서로 다른 세션을 추적합니다. 매개 변수에 pvContext 따라 플러그 인은 특정 호출에서 참조되는 프로젝트를 확인할 수 있습니다. 기능 비트 SCC_CAP_REENTRANT가 설정되지 않으면 재진입되지 않는 소스 제어 플러그 인은 여러 프로젝트에서 작업할 수 있는 기능이 제한됩니다.

참고 항목

SCC_CAP_REENTRANT 비트는 소스 제어 플러그 인 API 버전 1.1에서 도입되었습니다. 버전 1.0에서는 설정되지 않거나 무시되며 모든 버전 1.0 소스 제어 플러그 인은 재진입되지 않는 것으로 가정됩니다.

참고 항목