Hallo,
ich beschäftige mich derzeit mit einer kleinen Erweiterung des Mediaportal-Streamanalysers, welcher ja als Source im Filters-Ordner des Trunks zu finden ist. Ich habe hier ein wenig Code hinzugefügt und die Schnittstelle um zwei Methoden erweitert. Auf der Seite von MP habe ich ebenfalls das IEPGGrabber-Interface entsprechend angepasst.
Nun fange ich mir beim Zugriff auf meine Funktionen immer eine Exception:
Das Witzige ist, dass es eine Methode "GetEPGEventCount" gibt, welche exakt dieselbe Signatur wie meine Methode aufweist. Ich habe also mehr oder weniger Copy&Paste betrieben, jedoch kommt es schon garnicht erst zum funktionierenden Zugriff auf die Schnittstellenmethode in der MPSA.cpp (ein Debug-Log-Eintrag wird nicht erzeugt).
Vergesse ich irgendwas Wesentliches, was COM angeht? Eine Registrierung oder ähnliches? Wer hat MPSA schonmal erweitert?
Ich wollte mich an der PREMIERE-NVOD-Sache versuchen (SportPortal/Direkt-Optionskanäle) und habe halt den Streamanalyser so erweitert, dass er die Daten vorfiltert. Schaut bisher so aus im LOG:
Nun wollte ich diese Daten dann per GetSubChannelCount(..) und GetSubChannel(..) in MP weiterverarbeiten, was mir aber halt nicht gelingt. Hier mal eine der zwei Methoden:
MPSA.h
MPSA.cpp
IEPGGrabber.cs
Zu der Log-Ausgabe "Called: CStreamAnalyzer::GetSubChannelCount" kommt es garnicht erst, woraus zu schließen ist, dass es schon bei COM irgendwo krachen muss.
ich beschäftige mich derzeit mit einer kleinen Erweiterung des Mediaportal-Streamanalysers, welcher ja als Source im Filters-Ordner des Trunks zu finden ist. Ich habe hier ein wenig Code hinzugefügt und die Schnittstelle um zwei Methoden erweitert. Auf der Seite von MP habe ich ebenfalls das IEPGGrabber-Interface entsprechend angepasst.
Nun fange ich mir beim Zugriff auf meine Funktionen immer eine Exception:
02.07.2006 11:42:08 Exception ystem.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
Das Witzige ist, dass es eine Methode "GetEPGEventCount" gibt, welche exakt dieselbe Signatur wie meine Methode aufweist. Ich habe also mehr oder weniger Copy&Paste betrieben, jedoch kommt es schon garnicht erst zum funktionierenden Zugriff auf die Schnittstellenmethode in der MPSA.cpp (ein Debug-Log-Eintrag wird nicht erzeugt).
Vergesse ich irgendwas Wesentliches, was COM angeht? Eine Registrierung oder ähnliches? Wer hat MPSA schonmal erweitert?
Ich wollte mich an der PREMIERE-NVOD-Sache versuchen (SportPortal/Direkt-Optionskanäle) und habe halt den Streamanalyser so erweitert, dass er die Daten vorfiltert. Schaut bisher so aus im LOG:
Code:
02-07-2006 11:38:16 epg: LinkageDescriptor 'Portal' (type: 0xb0 tsid: 0x3 onid: 0x85 sid: 0x11)
02-07-2006 11:38:16 epg: LinkageDescriptor 'Motorsport' (type: 0xb0 tsid: 0x3 onid: 0x85 sid: 0xde)
02-07-2006 11:38:16 epg: LinkageDescriptor 'Kompakt' (type: 0xb0 tsid: 0x11 onid: 0x85 sid: 0xdd)
02-07-2006 11:38:16 epg: LinkageDescriptor 'Kompakt 16:9' (type: 0xb0 tsid: 0x3 onid: 0x85 sid: 0xf0)
02-07-2006 11:38:16 epg: LinkageDescriptor 'News' (type: 0xb0 tsid: 0x1 onid: 0x85 sid: 0x309)
Nun wollte ich diese Daten dann per GetSubChannelCount(..) und GetSubChannel(..) in MP weiterverarbeiten, was mir aber halt nicht gelingt. Hier mal eine der zwei Methoden:
MPSA.h
Code:
IEPGGrabber
STDMETHOD(GetSubChannelCount) (THIS_ ULONG channel, ULONG* subChannelCount)PURE;
Code:
CStreamAnalyser
STDMETHODIMP GetSubChannelCount( ULONG channel, ULONG* subChannelCount);
MPSA.cpp
Code:
STDMETHODIMP CStreamAnalyzer::GetSubChannelCount( ULONG channel, ULONG* subChannelCount)
{
try
{
Log("Called: CStreamAnalyzer::GetSubChannelCount");
*subChannelCount=m_pEPGPin->GetSubChannelCount(channel);
}
catch(...)
{
Dump("mpsaa: unhandled exception in GetSubChannelCount()");
}
return S_OK;
}
IEPGGrabber.cs
Code:
[PreserveSig]
int GetSubChannelCount([In] uint channel, [Out] out uint subChannelCount);
Zu der Log-Ausgabe "Called: CStreamAnalyzer::GetSubChannelCount" kommt es garnicht erst, woraus zu schließen ist, dass es schon bei COM irgendwo krachen muss.