Indeksowanie pliku ASF
[Funkcja skojarzona z tą stroną, windows Media Format 11 SDK, jest starszą funkcją. Został zastąpiony przez Source Reader i Sink Writer. Czytnik źródła i Zapisnik ujścia zostały zoptymalizowane pod kątem Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał czytnika źródeł i zapisywacza końcowego zamiast zestawu SDK Windows Media Format 11, jeśli jest to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]
Proces indeksowania pliku ASF jest bardzo prosty. Wywołaj metodę IWMIndexer::StartIndexing i przekaż nazwę pliku. Indeksator wykonuje resztę. Wywołanie StartIndexing jest asynchroniczne, dlatego stan musi być monitorowany przy użyciu wywołania zwrotnego OnStatus.
Poniższy kod pokazuje, jak indeksować plik ASF. Jeśli chcesz skonfigurować indeksator przed indeksowaniem pliku, musisz dołączyć kod z przykładu uwzględnionego w Aby skonfigurować indeksator.
W tym przykładzie uchwyt wskazujący zdarzenie musi zostać utworzony jako zmienna globalna, aby był dostępny dla wywołania zwrotnego. Następująca deklaracja powinna pojawić się w zakresie globalnym.
HANDLE g_hEvent = NULL;
W bardziej realistycznym scenariuszu uchwyt zdarzenia powinien być członkiem danych klasy, która zawiera zarówno funkcję zwrotną, jak i logikę uruchamiania indeksatora.
Indeksator wysyła kilka zdarzeń do wywołania zwrotnego OnStatus po wywołaniu metody IWMIndexer::StartIndexing. Możesz je wychwytywać zgodnie z potrzebami Twojej aplikacji. Co najmniej należy przechwycić WMT_CLOSED, który jest wysyłany po zakończeniu indeksowania. Użyj następującej logiki w ramach przełącznika komunikatów w implementacji OnStatus wywołania zwrotnego.
// Inside the status switch statement.
case WMT_CLOSED:
// You may want to deal with the HRESULT value passed with the status.
// If you do, you should do it here.
// Signal the event.
SetEvent(g_hEvent);
break;
W tym przykładzie zakłada się, że implementacja wywołania zwrotnego OnStatus jest uzyskiwana poprzez obiekt o nazwie MyCallback. Aby uzyskać więcej informacji na temat używania zdarzeń i wywołań zwrotnych z tym zestawem SDK, zobacz Używanie metod zwrotnych.
IWMIndexer* pMyIndexer = NULL;
HRESULT hr = S_OK;
WCHAR pwszFileName[] = L"C:\SomeFile.wmv";
// Initialize COM.
hr = CoInitialize(NULL);
// Create an event for asynchronous calls.
g_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
// Create an indexer.
hr = WMCreateIndexer(&pMyIndexer);
// TODO: Configure the indexer if needed. See To Configure the Indexer.
// Start the indexer.
hr = pMyIndexer->StartIndexing(pwszFileName, &MyCallback, NULL);
// Wait for the indexer to finish.
WaitForSingleObject(g_hEvent, INFINITE);
// Clean up.
pMyIndexer->Release();
pMyIndexer = NULL
CloseHandle(g_hEvent);
g_hEvent = NULL;
Tematy pokrewne