Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]
[Diese API wird nicht unterstützt und kann in Zukunft geändert oder nicht mehr verfügbar sein.]
In diesem Thema wird beschrieben, wie Sie die Fehlerprotokollierung in DirectShow Editing Services implementieren.
Deklarieren Sie zunächst eine Klasse, die die Fehlerprotokollierung implementiert. Die -Klasse erbt die IAMErrorLog-Schnittstelle . Sie enthält Deklarationen für die drei IUnknown-Methoden und für die einzelne Methode in IAMErrorLog. Die Klassendeklaration lautet wie folgt:
class CErrReporter : public IAMErrorLog
{
protected:
long m_lRef; // Reference count.
public:
CErrReporter() { m_lRef = 0; }
// IUnknown
STDMETHOD(QueryInterface(REFIID, void**));
STDMETHOD_(ULONG, AddRef());
STDMETHOD_(ULONG, Release());
// IAMErrorLog
STDMETHOD(LogError(LONG, BSTR, LONG, HRESULT, VARIANT*));
};
Die einzige Membervariable in der Klasse ist m_lRef, die die Verweisanzahl des Objekts enthält.
Definieren Sie als Nächstes die Methoden in IUnknown. Das folgende Beispiel zeigt eine Standardimplementierung für diese Methoden:
STDMETHODIMP CErrReporter::QueryInterface(REFIID riid, void **ppv)
{
if (ppv == NULL) return E_POINTER;
*ppv = NULL;
if (riid == IID_IUnknown)
*ppv = static_cast<IUnknown*>(this);
else if (riid == IID_IAMErrorLog)
*ppv = static_cast<IAMErrorLog*>(this);
else
return E_NOINTERFACE;
AddRef();
return S_OK;
}
STDMETHODIMP_(ULONG) CErrReporter::AddRef()
{
return InterlockedIncrement(&m_lRef);
}
STDMETHODIMP_(ULONG) CErrReporter::Release()
{
// Store the decremented count in a temporary
// variable.
ULONG uCount = InterlockedDecrement(&m_lRef);
if (uCount == 0)
{
delete this;
}
// Return the temporary variable, not the member
// variable, for thread safety.
return uCount;
}
Mit dem COM-Framework können Sie jetzt die IAMErrorLog-Schnittstelle implementieren. Im nächsten Abschnitt wird die Vorgehensweise beschrieben.
Zugehörige Themen