DetailPage-MSS-KB

Knowledge Base

Artikel-ID: 257990 - Geändert am: Freitag, 2. Juli 2004 - Version: 1.1

 

Zusammenfassung

Der Visual SourceSafe OLE-Automatisierung macht keine feste Funktionalität nicht direkt verfügbar. Aus diesem Grund besteht keine direkte Möglichkeit um mitzuteilen, wenn eine Datei, die er vom OLE-Automatisierung fixiert. Der folgende Beispielcode veranschaulicht dieses Problem zu umgehen und diese Informationen aus einem Visual C++-Programm.

Hinweis : Dieser Beispielcode wird davon ausgegangen, dass Sie die Visual SourceSafe OLE-Automatisierung mithilfe der Folgendes verweisen:
#import "path to ssapi.dll" no_namespace
				

Weitere Informationen

Der folgende Code vorausgesetzt ein Visual Basic-Projekt, und wenn Sie die Pfadinformationen erhalten, dass Sie die CheckPaths -Funktion aufrufen möchten. Es konnte einfach, ein Projekt als Parameter und berücksichtigen auch etwas mit den Ergebnissen verschiedener geändert werden.
void CheckPaths()
{
   // Reference to the VSS objects
   IVSSDatabasePtr   objVSSDatabase;
   IVSSItemPtr       objItem;
   IVSSItemsPtr      objItems;
   IVSSItemPtr       vssItem;
   IUnknownPtr       lpunk;
   IEnumVARIANTPtr   ppvobj;
   ULONG             fetched;
   VARIANT           st;

   try {
      // Create the database object and open a connection to our database
      objVSSDatabase.CreateInstance(__uuidof(VSSDatabase));
      objVSSDatabase->Open(L"C:\\Program Files\\Microsoft Visual Studio\\Common\\VSS60a\\srcsafe.ini", L"Admin", L"");

      // Create the Item object and set it to be $/ (the root project)
      objItem = objVSSDatabase->GetVSSItem("$/", false);

      // Check for pinned files in this project
      Links(objItem);

      // Get the items for this project
      objItems = objItem->GetItems(false);

      // Prepare to loop through the items
      lpunk = objItems->_NewEnum();
      lpunk.QueryInterface(IID_IEnumVARIANT, (void **)&ppvobj);

      // Loop through the items
      do {
         ppvobj->Next( 1UL, &st, &fetched );
         if( fetched != 0 ) {
            // Try to get the item
            if(!FAILED(st.punkVal->
               QueryInterface(__uuidof(IVSSItem), (void**)&vssItem))) {
               // If the item is a project, call the function to check if there
               // are subprojects in this project
               if (vssItem->GetType() == 0)
                  CheckSubProjects(vssItem);
            }
            st.punkVal->Release();
         }
      } while (fetched != 0);

      ppvobj->Release();
      lpunk->Release();

      // Inform the user that you are finished
      AfxMessageBox("All Done!");

   } catch (_com_error e) {
      // Some error handlers
   }
}

void CheckSubProjects(IVSSItemPtr objVSSProject)
{
   // Reference to the VSS objects
   IVSSItemsPtr     objItems;
   IVSSItemPtr      vssItem;
   IUnknownPtr      lpunk;
   IEnumVARIANTPtr  ppvobj;
   ULONG            fetched;
   VARIANT          st;

   try {
      // Check for pinned files in this project
      Links(objVSSProject);

      // Get the items for this project
      objItems = objVSSProject->GetItems(false);

      // Prepare to loop through the items
      lpunk = objItems->_NewEnum();
      lpunk.QueryInterface(IID_IEnumVARIANT, (void **)&ppvobj);

      // Loop through the items
      do {
         ppvobj->Next( 1UL, &st, &fetched );
         if( fetched != 0 ) {
            // Try to get the item
            if(!FAILED(st.punkVal->
               QueryInterface(__uuidof(IVSSItem), (void**)&vssItem))) {
               // If the item is a project, call the function to check if there
               // are subprojects in this project
               if (vssItem->GetType() == 0)
                  CheckSubProjects(vssItem);
            }
            st.punkVal->Release();
         }
      } while (fetched != 0);

      ppvobj->Release();
      lpunk->Release();
   } catch (_com_error e) {
      // Some error handlers
   }
}

void Links(IVSSItemPtr objVSSFile)
{
   // Reference to the VSS objects
   IVSSVersionsPtr   objVersions;
   IVSSVersionPtr    objVersion;
   CString           UnpinArray[40];
   CString           vssAction;
   IUnknownPtr       lpunk;
   IEnumVARIANTPtr   ppvobj;
   ULONG             fetched;
   VARIANT           st;
   int               i, j, found;

   try {
      // Initialize variables
      found = i = j = 0;

      // Get the items for this project
      objVersions = objVSSFile->GetVersions(0L);

      // Prepare to loop through the items
      lpunk = objVersions->_NewEnum();
      lpunk.QueryInterface(IID_IEnumVARIANT, (void **)&ppvobj);

      // Loop through the items
      do {
         ppvobj->Next( 1UL, &st, &fetched );
         if( fetched != 0 ) {
            // Try to get the item
            if(!FAILED(st.punkVal->
               QueryInterface(__uuidof(IVSSVersion), (void**)&objVersion))) {
               // See what the event is that you are looking at
               vssAction = (LPCTSTR) objVersion->GetAction();
               // If it is a pin, check if you already have an unpin for this file
               if (vssAction.Left(6) == "Pinned") {
                  for (j = 0; j <= i; j++) {
                     if ((!UnpinArray[j].IsEmpty()) && (vssAction.Find(UnpinArray[j], 0) != -1)) {
                        // Set found to 1, the file is not pinned.
                        found = 1;
                        break;
                     }
                  }

                  // If you found it, print it out
                  if (found == 0)
                     OutputDebugString(vssAction);

               } else if (vssAction.Left(8) == "Unpinned") {
                  UnpinArray[i] = vssAction.Right(vssAction.GetLength() - 10);
                  i++;
               }
            }
            st.punkVal->Release();
         }
      } while (fetched != 0);

      ppvobj->Release();
      lpunk->Release();
   } catch (_com_error e) {
      // Some error handlers
   }
}
				

Informationsquellen

Weitere Informationen der folgenden Microsoft-Website:
Visual SourceSafe 6.0-Automatisierung
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvss/html/vssauto.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvss/html/vssauto.asp)
Weitere Informationen finden Sie die Artikel der Microsoft Knowledge Base:
257989  (http://support.microsoft.com/kb/257989/EN-US/ ) Festlegen und Lösen von Dateien in SourceSafe von OLE-Automatisierung

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual SourceSafe 5.0 Standard Edition
  • Microsoft Visual SourceSafe 6.0 Standard Edition
Keywords: 
kbmt kbautomation kbhowto KB257990 KbMtde
Maschinell übersetzter ArtikelMaschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 257990  (http://support.microsoft.com/kb/257990/en-us/ )
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Freigeben
Weitere Supportoptionen
Microsoft Community-Supportforen
Kontaktieren Sie uns direkt
Zertifizierten Partner finden
Microsoft Store