msvidctl.h - header für Interface für DirectShow-Controls: Versch. Fehler beim Compilieren



  • Ich weiß, ich stress langsam mit meinen DirectShow-Fragen, aber falls es jemanden Interessiert, das ganze soll eine DLL zum verwenden von TV-Karten werden, was dann für NAMP verwendet werden soll.

    Nun aber zum Problem:
    Um die TV-Karte zu finden, muss ich erst alle Devices durchsuchen, was die Interface IMSVidInputDevices erledigt. Dafür wird die Datei "MSVidCtl.h" benötigt.
    Wenn ich jedoch das Projekt mit der Header includiert kompilieren will, bekomme ich 20 Fehlermeldungen aus der Datei "segment.h", z.B.: "Syntaxfehler : Bezeichner 'LONG_PTR'" bei dem Codestück:

    HRESULT STDMETHODCALLTYPE IMSVidGraphSegment_OnEventNotify_Proxy( 
        IMSVidGraphSegment * This,
        LONG lEventCode,
        LONG_PTR lEventParm1,
        LONG_PTR lEventParm2);
    

    (Die Segment.h ist eine DirectX-Datei, nur so nebenbei)
    Das ganze läuft auf WinXP Prof SP1; DirectX9 c, Update vom April 05

    Nachdem die MSDN nicht viel darbüber ausgespuckt hat (z.B. ob ich andere libs einbinden muss ect.) und keines der Beispiele diese Interface benutzt, hoffe ich jetzt drauf, dass jemand in diesem Forum is, der weiß, was das Problem sein könnte 😃



  • so, nach einigen härteren Begegnungen zwischen meinem Kopf und der Wand neben mir bin ich etwas weitergekommen:
    Es kamen um genau zu sein 20 Fehler zu 6 unbekannten Bezeichnern:

    • LONG_PTR: Habe ich gelöst, in dem ich einfach in die Segment.h hergenommen hab und nen typedef reingesetzt hab. Nicht gerade eine saubere Lösung... ("If only my wife would be so dirty" 😃 )
    • LPCGUID: Hab ich in der winScard.h gefunden, also einfach die eingebunden [abgehakt]
    • IVMRImageCompositor: Diese Interface ist in der strmif.h deklariert. Ich habe diese also eingebunden, aber es hat nichts gebracht 😕 [Fehler besteht also immernoch]
    • IVMRMixerBitmap: Das selbe wie bei IVMRImageCompositor
    • IVMRSurfaceAllocator: Auch das selbe wie bei IVMRImageCompositor...
    • VMRALPHABITMAP: Und nochmal das selbe, mit der Ausnahme, dass es sich diesmal nicht um eine Interface, sondern um ein Struct handelt...

    Inzwischen bin ich (durch die Beseitigung der Fehler zu LONG_PTR und LPCGUID) auf 12 Fehler geschrupft, was mir aber immernoch 12 Fehler zu viel sind 😉
    Wie man vielleicht erkennen kann, liegt die Lösung in dieser strmif.h, welche beispielsweise dieses Codestück enthält:

    #ifndef __IVMRSurfaceAllocator_FWD_DEFINED__
    #define __IVMRSurfaceAllocator_FWD_DEFINED__
    typedef interface IVMRSurfaceAllocator IVMRSurfaceAllocator;
    #endif 	/* __IVMRSurfaceAllocator_FWD_DEFINED__ */
    

    Auch wenn ich direkt vor der Verwendung der Interface in der Segment.h schreibe

    #include <strmif.h>
    #ifndef __IVMRSurfaceAllocator_FWD_DEFINED__
    #error Crap
    #endif
    

    erhalte ich den "fatal error C1189: #Fehler : Crap"

    Woran könnte das liegen?

    (PS: Sowohl die Segment.h, in der die Fehler auftreten, als auch die strmif.h befinden sich im Direct-X Includeverzeichnis, sind also standardmäßig dabei)



  • Vielleicht ham die ganze Kopfschmerztabletten geholfen, aber ich habs soweit schon mal auf einen Fehler reduzieren können 🕶
    Bis dahin hab ichs geschafft, indem ich den absoluten Pfad der Header-Dateien angegeben hab. Das Ursprungsproblem enstand nämlich, dass einmal die Header aus dem DirectX-SDK-Verzeichnis eingebunden wurde, und einmal ausm VS6-Verzeichnis.

    Anywayz, das Problem liegt immernoch in der strmif.h. (So wie ich das sehe, werd ich die mal heiraten, wenn ich groß bin 😃 )
    Jedenfalls is dort ist eine kleine Codezeile:

    typedef DWORD_PTR DWORD*;
    

    1. Versteh ich die nicht (müsst das theoretisch nicht umgedreht sein?)
    2. Versteht die mein VS auch nicht. Zumindest meckerts da nen Syntaxfehler an: "Fehlendes ';' vor Bezeichner 'DWORD'"

    Das ganze zu "typedef DWORD* DWORD_PTR" hat was gebracht: Die Fehlermeldung is weg, aber 37 neue sind da 😮
    (LPDIRECTDRAWSURFACE7, LPDIRECTDRAW7 ect. kennt er nicht)
    Erscheint mir auch logisch, hab schließlich auch DirectX9 und nicht DX7...

    Muss ich mir da eine neue Version der Datei herunterladen? Oder soll ich das ganze gleich auf .NET mit managed DirectX versuchen, in der Hoffnung, dasses da einfacher is?


Log in to reply