Najlepsze rozwiązania dotyczące implementowania wtyczki kontroli źródła

Poniższe szczegóły techniczne mogą pomóc w niezawodnym zaimplementowaniu wtyczki kontroli źródła w programie Visual Studio.

Problemy z zarządzaniem pamięcią

W większości przypadków zintegrowane środowisko projektowe (IDE), które jest obiektem wywołującym, zwalnia i przydziela pamięć. Wtyczka kontroli źródła zwraca ciągi i inne elementy w buforach przydzielonych przez obiekt wywołujący. Wyjątki są zanotowane w opisach określonych funkcji, w których występują.

Tablice nazw plików

Po przekazaniu tablicy plików nie jest przekazywana jako ciągła tablica nazw plików. Jest on przekazywany jako tablica wskaźników do nazw plików. Na przykład w SccGet nazwy plików są przekazywane przez lpFileNames parametr , gdzie lpFileNames jest w rzeczywistości wskaźnikiem char **do . lpFileNames[0] jest wskaźnikiem do imienia, lpFileNames[1] jest wskaźnikiem do drugiej nazwy itd.

Duży model

Wszystkie wskaźniki to 32 bity, nawet w 16-bitowych systemach operacyjnych.

W pełni kwalifikowane ścieżki

Jeśli nazwy plików lub katalogi są określane jako argumenty, muszą być w pełni kwalifikowane ścieżki lub ścieżki UNC bez końcowych ukośników odwrotnych. Obowiązkiem wtyczki kontroli źródła jest przetłumaczenie ich na ścieżki względne, jeśli jest to wymaganie podstawowego systemu kontroli źródła.

Określanie w pełni kwalifikowanej ścieżki dla zarejestrowanej biblioteki DLL

Środowisko IDE nie ładuje już bibliotek DLL ze ścieżek względnych (na przykład .\NewProvider.dll). Należy określić pełną ścieżkę biblioteki DLL (na przykład C:\Providers\NewProvider.dll). To wymaganie zwiększa bezpieczeństwo środowiska IDE, uniemożliwiając ładowanie nieautoryzowanych lub personifikowanych bibliotek DLL kontroli źródła.

Sprawdź istniejącą wtyczkę VSSCI podczas instalowania wtyczki kontroli źródła

Użytkownik, który planuje zainstalować wtyczkę kontroli źródła, może już mieć zainstalowaną wtyczkę kontroli źródła na komputerze. Program instalacyjny (instalacyjny) dla utworzonej wtyczki powinien określić, czy istnieją istniejące wartości dla odpowiednich kluczy rejestru. Jeśli te klucze są już ustawione, program instalacyjny powinien zapytać użytkownika, czy zarejestrować wtyczkę jako domyślną wtyczkę kontroli źródła i zastąpić ten, który jest już zainstalowany.

Kody wyników błędów i raportowanie

Kod SCC_OK powrotny funkcji kontroli źródła wskazuje, że operacja zakończyła się pomyślnie dla wszystkich plików. Jeśli operacja zakończy się niepowodzeniem, oczekuje się, że zostanie zwrócony ostatni kod błędu.

Regułą raportowania jest to, że jeśli wystąpi błąd w środowisku IDE, środowisko IDE jest odpowiedzialne za raportowanie go. Jeśli w systemie kontroli źródła wystąpi błąd, wtyczka kontroli źródła jest odpowiedzialna za raportowanie go. Na przykład w środowisku IDE nie wybrano żadnych plików, natomiast ten plik został już wyewidencjonowany , zostanie zgłoszony przez wtyczkę.

Struktura kontekstu

Podczas wywołania metody SccInitialize obiekt wywołujący przekazuje ppvContext parametr , który jest niezainicjowanym dojściem do pustki. Wtyczka kontroli źródła może zignorować ten parametr lub może przydzielić strukturę dowolnego rodzaju i umieścić wskaźnik do tej struktury w przekazanym wskaźniku. Środowisko IDE nie rozumie tej struktury, ale przekazuje wskaźnik do tej struktury do każdego innego wywołania wtyczki. Zapewnia to cenne informacje o pamięci podręcznej kontekstu do wtyczki, która może służyć do obsługi informacji o stanie globalnym, które są utrwalane między wywołaniami funkcji bez używania zmiennych globalnych. Wtyczka jest odpowiedzialna za zwolnienie struktury przy wywołaniu interfejsu SccUninitialize.

Jeśli wtyczka ustawia SCC_CAP_REENTRANT bit w SccInitialize (w szczególności w parametrze lpSccCaps ), wiele struktur kontekstowych jest używanych do śledzenia wszystkich otwartych projektów.

Bitflags i inne opcje poleceń

Dla każdego polecenia, takiego jak SccGet, środowisko IDE może określić wiele opcji, które zmieniają zachowanie polecenia.

Interfejs API obsługuje ustawienie niektórych opcji przez środowisko IDE za pomocą parametru fOptions . Te opcje są opisane w bitflags używanych przez określone polecenia wraz z poleceniami, które mają wpływ. Ogólnie rzecz biorąc, są to opcje, dla których użytkownik nie będzie monitowany.

Większość opcji ustawień konfigurowalnych przez użytkownika nie jest definiowana w ten sposób, ponieważ różnią się one znacznie między wtyczkami kontroli źródła. W związku z tym zalecany mechanizm jest przyciskiem Zaawansowane . Na przykład w oknie dialogowym Pobieranie środowisko IDE wyświetla tylko informacje, które rozumie, ale wyświetla również przycisk Zaawansowane , jeśli wtyczka ma opcje dla tego polecenia. Gdy użytkownik kliknie przycisk Zaawansowane , środowisko IDE wywołuje polecenie SccGetCommandOptions, aby włączyć wtyczkę kontroli źródła w celu wyświetlenia monitu użytkownika o informacje, takie jak bitflags lub data/godzina. Wtyczka zwraca te informacje w strukturze, która jest przekazywana z powrotem podczas SccGet polecenia.