[c++/DX] DirectShow - Devarian

kickerxy123

Erfahrenes Mitglied
Hallo!

Also ich benutze Devarian-cpp und DirectX9.

Soweit läuft auch alles ganz gut (mir ist bekannt, dass dev nicht offiziell unterstützt wird); es hapert nur an manchen Stellen.

Bei DirectShow komme ich nicht so recht weiter. Zwar ist es prinzipiell möglich Devarian dafür fit zu machen, doch mir fehlt die rechte Eingebung.

Dazu habe ich vorweg eine Frage.
Ist es prinzipiell möglich DirectShow in visualc++ einzubinden, dort eine .lib zu erstellen, die - wie auch immer - directShow funktionalitäten bietet; diese dann mithilfe von mingw (Stichwort "reimp") in eine .a zu konvertieren und diese dann letztlich in devarian einzubinden? Oder führt dies zu nichts?

Ansonsten hätte ich noch eine andere Idee.

Übrigens benutze ich nicht das spezielle Dev-DX-Pack, sondern eine ganz normale Version.

Ein Umstieg auf Visual-cpp o.ä. kommt nicht in Frage; da verzichte ich lieber auf DirectShow.


lg kickerxy
 
Hi,

keien Ahnung was du gegen VisualStudio hast aber nun gut.

Ich weiß zwar nich ob es mit ner lib geht, was es jedoch sollte, aber mit nen DLL geht es bestimmt. Du musst halt "nur" für alles mögliche Funktionen schreiben die den DX kram dann in der DLL erledigen.

Gruß
Anfänger
 
ja okay, gegen eine dll habe ich nichts einzuwenden.

Klar bedeutet dies ein wenig Aufwand, aber es hält sich in Grenzen denke ich.

Naja gegen Visual habe ich direkt nichts. Nur habe ich mich zum einen an Devarian gewöhnt; zum anderen habe ich keine Lust das bisher vorhandene nur wegen DirectShow auf Visual zu übertragen. Ich mag nun einmal das schlichte Devarian ;)

Danke für deine Antwort,

ich werde nun versuchen die Idee umzusetzen.

lg
kickerxy


#edit es scheint zu gehen... morgen werde ich es mit Sicherheit wissen.
Danke nochmal

kickerxy
 
Zuletzt bearbeitet:
hm ich habe einige Probleme beim Umgang mit Visual :/

Aber ok.

ich habe nun folgenden Code
C++:
void createDxShow(void)
{
IGraphBuilder* pGraph;

HRESULT hResult = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&pGraph);

if(FAILED(hResult))
{
	//Hierbei muss in den Projektoptionen auf Multibyte statt Unicode gewechselt werden!
	MessageBox(NULL, "Fehler beim Erzeugen einer DirectShow relevanten Schnittstelle @ CoCreateInstance", "Information",MB_OK);
	std::string fehler;
	fehler = "undefined";
	if(hResult == E_NOINTERFACE) fehler = "E_NOINTERFACE";
	if(hResult == E_POINTER) fehler = "E_POINTER";
	if(hResult == CLASS_E_NOAGGREGATION) fehler = "CLASS_E_NOAGGREGATION";
	if(hResult == REGDB_E_CLASSNOTREG) fehler = "REGDB_E_CLASSNOTREG";
	if(hResult == S_OK) fehler = "S_OK";
	writeToLog(fehler);
}
else
writeToLog("DirectShow Schnittstelle wurde erfolgreich erzeugt @ dxshow.dll");



}

dieser Code ist dann Bestandteil einer .dll.

Diese lade ich nun in Devarian und führe diese Funktion aus.
Nun springt er aber in die [[if(FAILED(hResult))]] rein... Tja und das wirklich seltsame, der String "fehler" bleibt bei "undefined"! Laut Microsoft gibt es aber nur die 5 Möglichkeiten, warum wird die Variable fehler dann nciht verändert? Oder liegt es am Aufruf von Devarian?



#edit Problem gelöst.
Es lag daran, dass ich zuvor nicht
C++:
CoInitialize(NULL);
angegeben habe :/ seltsam nur, dass er dabei einen unbekannten Fehler zurückgibt und auch seltsam, dass in meinem Buch dieser Aufruf nciht vorhanden ist.

#edit 2 Jup es geht =)

Er hat meine mp3 sowie meine avi problemlos in Dev über die DLL abgespielt =)
 
Zuletzt bearbeitet:
Zurück