dshow cinterface definieren



  • Wieso sollte Precompiled-Header mit C nicht möglich sein? Dein Precompiled-Header File muss halt auch ein C File sein. Natürlich kannst du nicht eine Precompiled-Header die mit einem C++ File erstellt wurde in einem C File verwenden.

    Davon abgesehen: wieso sollte DirectShow Precompiled-Header voraussetzen?

    Ich habe beides noch nicht selbst probiert, aber ich bin mir ziemlich sicher dass beides problemlos geht.

    Falls nicht poste bitte mal die entsprechenden Fehlermeldungen die du bekommst. Einfach "geht nicht" ist ein wenig wenig.



  • 1>c:\dokumente und einstellungen\administrator\desktop\getvideodevicename\devlist\devlist.cpp(34) : error C2039: 'Release' : is not a member of 'IEnumMoniker'
    1> c:\programme\microsoft sdks\windows\v6.0a\include\objidl.h(2215) : see declaration of 'IEnumMoniker'
    1>c:\dokumente und einstellungen\administrator\desktop\getvideodevicename\devlist\devlist.cpp(40) : error C2039: 'Release' : is not a member of 'IEnumMoniker'
    1> c:\programme\microsoft sdks\windows\v6.0a\include\objidl.h(2215) : see declaration of 'IEnumMoniker'
    1>c:\dokumente und einstellungen\administrator\desktop\getvideodevicename\devlist\devlist.cpp(53) : error C3861: 'IID_PPV_ARGS': identifier not found
    1>c:\dokumente und einstellungen\administrator\desktop\getvideodevicename\devlist\devlist.cpp(58) : error C2039: 'CreateClassEnumerator' : is not a member of 'ICreateDevEnum'
    1> c:\programme\microsoft sdks\windows\v6.0a\include\strmif.h(972) : see declaration of 'ICreateDevEnum'
    1>c:\dokumente und einstellungen\administrator\desktop\getvideodevicename\devlist\devlist.cpp(63) : error C2039: 'Release' : is not a member of 'ICreateDevEnum'
    1> c:\programme\microsoft sdks\windows\v6.0a\include\strmif.h(972) : see declaration of 'ICreateDevEnum'
    1>c:\dokumente und einstellungen\administrator\desktop\getvideodevicename\devlist\devlist.cpp(79) : error C2039: 'Next' : is not a member of 'IEnumMoniker'
    1> c:\programme\microsoft sdks\windows\v6.0a\include\objidl.h(2215) : see declaration of 'IEnumMoniker'



  • Soll das jetzt ein Scherz sein?



  • Warum? Bin ein Anfänger weis wirklich nicht was du meinst!
    Wenn ich ein CPP Project mache mit precompiled header, dann funktioniert es!



  • Vielleicht solltest du versuchen ein C Projekt zu machen, mit oder ohne Precompiled-Header, aber auf jeden Fall ohne CPP (=C++) Files zu verwenden?


  • Mod

    Also Direct Show ohne C++ abzuwickeln ist schon ein mutiges Unterfangen... und ziemlich sinnlos.



  • Martin Richter schrieb:

    Also Direct Show ohne C++ abzuwickeln ist schon ein mutiges Unterfangen... und ziemlich sinnlos.

    Er will doch keine Filter bauen, sondern nur ein paar Methoden aufrufen. Da ist es doch ganz egal, ob er nun C++ oder C verwendet. Soviel mehr zu tippen ist da auch nicht.

    Die Frage ist doch eher: Was wird denn jetzt eigentlich verwendet? Da nach C gefragt wird, die Dateien aber .cpp heißen, verwirrt mich das sehr viel mehr...


  • Mod

    Ja! Aber DriectShow setzt sich aus Intrfaces zusammen und Intrfaces wie IEnumMoniker in C zu bedienen gehört schon zu den höheren Weihen eine "C" Programmierers und vor allem gehört "viel Verständnis" dazu.

    Ich würde soetwas grundsätzlich nur noch aus C++ bedienen.

    Und wie man schon sieht, hat der OP vermutlich gar keine Ahnung, dass der Code, den er (evtl.) kopiert hat C++ ist! 😉



  • Martin Richter schrieb:

    Ja! Aber DriectShow setzt sich aus Intrfaces zusammen und Intrfaces wie IEnumMoniker in C zu bedienen gehört schon zu den höheren Weihen eine "C" Programmierers und vor allem gehört "viel Verständnis" dazu.

    Ich würde soetwas grundsätzlich nur noch aus C++ bedienen.

    Das sieht doch aber in C genau so aus, wie es in C++ auch aussieht. Du musst doch lediglich den This-Pointer händisch übergeben (na gut, eine zusätzliche Indirektion beim Aufruf gibt's auch noch). Man sollte sich lieber überlegen, ob man sich DirectShow als Anfänger überhaupt antun möchte, egal ob C oder C++. Das Verständnis von IEnumMoniker braucht es in beiden Varianten.

    Martin Richter schrieb:

    Und wie man schon sieht, hat der OP vermutlich gar keine Ahnung, dass der Code, den er (evtl.) kopiert hat C++ ist! 😉

    🙂



  • hustbaer schrieb:

    ...aber auf jeden Fall ohne CPP (=C++) Files zu verwenden?

    Bis vor ganz kurzer Zeit habe ich auch gedacht, dies sei die einzige Möglichkeit. Ab Version 2003 (?) des VC gibt es aber bei den Compileroptionen die Schalter (/TP) und (/TC).

    Es würde aber nichts daran ändern, die Fehlermeldungen lassen auf C++-Code schließen, der durch den C89-VCompiler gejagt wird.
    Bspw. darf nicht IEnumMoniker::Release (IUnknown::Release) aufgerufen werden, sondern das C-Interface der jeweiligen Klassen, bei IEnumMoniker also

    ULONG ( STDMETHODCALLTYPE *Release )( IEnumMoniker * This);
    

    Du müsstest das Ganze also entweder umschreiben, oder bei C++ (mit oder ohne Precompiled Header) bleiben. Letzteres halte ich in dem Context auch für das Beste.



  • Genau dass wollte ich wissen. Besten Dank


Anmelden zum Antworten