Dumpdoc on 64bit VLC ActiveX doesn't work



  • 64bit VLC Media Player 2.2.2 comes with an 64bit ActiveX component called axvlc.dll. I am trying to embed this component into my 64bit Qt application.

    • First I am trying to get the interface description by using dumpdoc. It has many interfaces. I need all of their descriptions.
    c:\Program Files\VideoLAN\VLC\ax-vlc>dumpdoc {9BE31822-FDAD-461B-AD51-BE1D1C159921} -o axvlc.html
    QAxBase::setControl: requested control {9BE31822-FDAD-461B-AD51-BE1D1C159921} could not be instantiated
    dumpdoc: Could not instantiate COM object '{9BE31822-FDAD-461B-AD51-BE1D1C159921}'
    
    

    That is failing.

    • Second, dumpcpp
    dumpcpp -getfile {9BE31822-FDAD-461B-AD51-BE1D1C159921}
    

    is not generating anything at all. That's failing too.

    • Third,
      OleView.exe (from C:\Program Files (x86)\Windows Kits\8.1\bin\x64) is giving me the following IDL but Qt is not using any of it's info.

    • So, how can I use this component?

    // Generated .IDL file (by the OLE/COM Object Viewer)
    // 
    // typelib filename: axvlc.dll
    
    [
      uuid(DF2BBE39-40A8-433B-A279-073F48DA94B6),
      version(1.0),
      helpstring("VideoLAN VLC ActiveX Plugin"),
      custom(DE77BA64-517C-11D1-A2DA-0000F8773CE9, 117441067),
      custom(DE77BA63-517C-11D1-A2DA-0000F8773CE9, 1453299190),
      custom(DE77BA65-517C-11D1-A2DA-0000F8773CE9, "Created by WIDL version 1.6 at Wed Jan 20 15:13:10 2016
    
    ")
    
    ]
    library AXVLC
    {
        // TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
        importlib("stdole2.tlb");
    
        // Forward declare all types defined in this typelib
        interface IVLCAudio;
        interface IVLCChapter;
        interface IVLCInput;
        interface IVLCTitle;
        interface IVLCLogo;
        interface IVLCDeinterlace;
        interface IVLCMarquee;
        interface IVLCPlaylist;
        interface IVLCPlaylistItems;
        interface IVLCSubtitle;
        interface IVLCVideo;
        interface IPictureDisp;
        interface IVLCControl2;
        interface IVLCMediaDescription;
        dispinterface DVLCEvents;
    
        [
          odl,
          uuid(9E0BD17B-2D3C-4656-B94D-03084F3FD9D4),
          helpstring("VLC Audio APIs"),
          dual,
          oleautomation
        ]
        interface IVLCAudio : IDispatch {
            [id(0x60020000), propget, helpstring("Returns/sets the audio mute state.")]
            HRESULT mute([out, retval] VARIANT_BOOL* muted);
            [id(0x60020000), propput, helpstring("Returns/sets the audio mute state.")]
            HRESULT mute([in] VARIANT_BOOL muted);
            [id(0x60020002), propget, helpstring("Returns/sets audio volume as a percent value.")]
            HRESULT volume([out, retval] long* volume);
            [id(0x60020002), propput, helpstring("Returns/sets audio volume as a percent value.")]
            HRESULT volume([in] long volume);
            [id(0x60020004), helpstring("Mute/unmute audio playback.")]
            HRESULT toggleMute();
            [id(0x60020005), propget, helpstring("Returns/sets audio track used/to use.")]
            HRESULT track([out, retval] long* track);
            [id(0x60020005), propput, helpstring("Returns/sets audio track used/to use.")]
            HRESULT track([in] long track);
            [id(0x60020007), propget, helpstring("Returns the number of audio tracks available.")]
            HRESULT count([out, retval] long* trackNumber);
            [id(0x60020008), helpstring("Returns audio track name.")]
            HRESULT description(
                            [in] long trackID, 
                            [out, retval] BSTR* name);
            [id(0x60020009), propget, helpstring("Returns audio channel [1-5] indicating; stereo, reverse stereo, left, right, dolby.")]
            HRESULT channel([out, retval] long* channel);
            [id(0x60020009), propput, helpstring("Returns audio channel [1-5] indicating; stereo, reverse stereo, left, right, dolby.")]
            HRESULT channel([in] long channel);
        };
    
        [
          odl,
          uuid(5AF314CF-8849-4A79-A3FC-8DE6625D9E72),
          helpstring("VLC Chapter APIs"),
          dual,
          oleautomation
        ]
        interface IVLCChapter : IDispatch {
            [id(0x60020000), propget, helpstring("Returns the number of chapter tracks available.")]
            HRESULT count([out, retval] long* countTracks);
            [id(0x60020001), helpstring("Returns the number of chapter tracks available of a specific title.")]
            HRESULT countForTitle(
                            [in] long title, 
                            [out, retval] long* countTracks);
            [id(0x60020002), propget, helpstring("Returns/sets chapter track used/to use.")]
            HRESULT track([out, retval] long* track);
            [id(0x60020002), propput, helpstring("Returns/sets chapter track used/to use.")]
            HRESULT track([in] long track);
            [id(0x60020004), helpstring("Returns the current chapter track name.")]
            HRESULT description(
                            [in] long title, 
                            [in] long chapter, 
                            [out, retval] BSTR* name);
            [id(0x60020005), helpstring("Advance to next chapter in current title.")]
            HRESULT next();
            [id(0x60020006), helpstring("Advance to previous chapter in current title.")]
            HRESULT prev();
        };
    
        [
          odl,
          uuid(49E0DBD1-9440-466C-9C97-95C67190C603),
          helpstring("VLC Input APIs"),
          dual,
          oleautomation
        ]
        interface IVLCInput : IDispatch {
            [id(0x60020000), propget, helpstring("Returns the clip length, in milliseconds.")]
            HRESULT length([out, retval] double* length);
            [id(0x60020001), propget, helpstring("Returns/sets playback position in current clip.  Position is ranging from 0.0 to 1.0.")]
            HRESULT position([out, retval] double* position);
            [id(0x60020001), propput, helpstring("Returns/sets playback position in current clip.  Position is ranging from 0.0 to 1.0.")]
            HRESULT position([in] double position);
            [id(0x60020003), propget, helpstring("Returns/sets playback time in current clip, in milliseconds.")]
            HRESULT time([out, retval] double* time);
            [id(0x60020003), propput, helpstring("Returns/sets playback time in current clip, in milliseconds.")]
            HRESULT time([in] double time);
            [id(0x60020005), propget, helpstring("Returns current playback state.")]
            HRESULT state([out, retval] long* state);
            [id(0x60020006), propget, helpstring("Returns/sets current playback rate, normal rate is 1.0 ")]
            HRESULT rate([out, retval] double* rate);
            [id(0x60020006), propput, helpstring("Returns/sets current playback rate, normal rate is 1.0 ")]
            HRESULT rate([in] double rate);
            [id(0x60020008), propget, helpstring("Returns current playback frames per seconds if available.")]
            HRESULT fps([out, retval] double* fps);
            [id(0x60020009), propget, helpstring("Returns whether current playback displays video.")]
            HRESULT hasVout([out, retval] VARIANT_BOOL* hasVout);
            [id(0x6002000a), propget, helpstring("Returns the title object.")]
            HRESULT title([out, retval] IVLCTitle** obj);
            [id(0x6002000b), propget, helpstring("Returns the chapter object.")]
            HRESULT chapter([out, retval] IVLCChapter** obj);
        };
    
        [
          odl,
          uuid(B5DEF5A1-FFB6-4E68-B3D8-A12AC60FDA54),
          helpstring("VLC Title APIs"),
          dual,
          oleautomation
        ]
        interface IVLCTitle : IDispatch {
            [id(0x60020000), propget, helpstring("Returns the number of title tracks available.")]
            HRESULT count([out, retval] long* countTracks);
            [id(0x60020001), propget, helpstring("Returns/sets title track used/to use.")]
            HRESULT track([out, retval] long* track);
            [id(0x60020001), propput, helpstring("Returns/sets title track used/to use.")]
            HRESULT track([in] long track);
            [id(0x60020003), helpstring("Returns the current title track name.")]
            HRESULT description(
                            [in] long track, 
                            [out, retval] BSTR* name);
        };
    
        [
          odl,
          uuid(8A4A20C2-93F3-44E8-8644-BEB2E3487E84),
          helpstring("VLC Logo Filter"),
          dual,
          oleautomation
        ]
        interface IVLCLogo : IDispatch {
            [id(0x60020000), helpstring("Enable the logo filter.")]
            HRESULT enable();
            [id(0x60020001), helpstring("Disable the logo filter.")]
            HRESULT disable();
            [id(0x60020002), helpstring("specify input file[[,delay],alpha].")]
            HRESULT file([in] BSTR fname);
            [id(0x60020003), propget]
            HRESULT delay([out, retval] long* val);
            [id(0x60020003), propput]
            HRESULT delay([in] long val);
            [id(0x60020005), propget]
            HRESULT repeat([out, retval] long* val);
            [id(0x60020005), propput]
            HRESULT repeat([in] long val);
            [id(0x60020007), propget, helpstring("Returns the `global' alpha value.")]
            HRESULT opacity([out, retval] long* val);
            [id(0x60020007), propput, helpstring("Returns the `global' alpha value.")]
            HRESULT opacity([in] long val);
            [id(0x60020009), propget, helpstring("Retrieve picture position.")]
            HRESULT position([out, retval] BSTR* val);
            [id(0x60020009), propput, helpstring("Retrieve picture position.")]
            HRESULT position([in] BSTR val);
            [id(0x6002000b), propget, helpstring("Picture x offset.")]
            HRESULT x([out, retval] long* val);
            [id(0x6002000b), propput, helpstring("Picture x offset.")]
            HRESULT x([in] long val);
            [id(0x6002000d), propget, helpstring("Picture y offset.")]
            HRESULT y([out, retval] long* val);
            [id(0x6002000d), propput, helpstring("Picture y offset.")]
            HRESULT y([in] long val);
        };
    
        [
          odl,
          uuid(BC97469F-CB11-4037-8DCE-5FC9F5F85307),
          helpstring("VLC Deinterlace Filter"),
          dual,
          oleautomation
        ]
        interface IVLCDeinterlace : IDispatch {
            [id(0x60020000), helpstring("Enable deinterlace filter and set method.")]
            HRESULT enable([in] BSTR mode);
            [id(0x60020001), helpstring("Disable deinterlace filter.")]
            HRESULT disable();
        };
    
        [
          odl,
          uuid(8D076AD6-9B6F-4150-A0FD-5D7E8C8CB02C),
          helpstring("VLC Marquee Filter"),
          dual,
          oleautomation
        ]
        interface IVLCMarquee : IDispatch {
            [id(0x60020000), helpstring("enable Marquee Filter.")]
            HRESULT enable();
            [id(0x60020001), helpstring("disable Marquee Filter.")]
            HRESULT disable();
            [id(0x60020002), propget, helpstring("Retrieve marquee text.")]
            HRESULT text([out, retval] BSTR* val);
            [id(0x60020002), propput, helpstring("Retrieve marquee text.")]
            HRESULT text([in] BSTR val);
            [id(0x60020004), propget, helpstring("Retrieve text color.")]
            HRESULT color([out, retval] long* val);
            [id(0x60020004), propput, helpstring("Retrieve text color.")]
            HRESULT color([in] long val);
            [id(0x60020006), propget, helpstring("Retrieve text opacity.")]
            HRESULT opacity([out, retval] long* val);
            [id(0x60020006), propput, helpstring("Retrieve text opacity.")]
            HRESULT opacity([in] long val);
            [id(0x60020008), propget, helpstring("Retrieve text position.")]
            HRESULT position([out, retval] BSTR* val);
            [id(0x60020008), propput, helpstring("Retrieve text position.")]
            HRESULT position([in] BSTR val);
            [id(0x6002000a), propget, helpstring("Retrieve text refresh time.")]
            HRESULT refresh([out, retval] long* val);
            [id(0x6002000a), propput, helpstring("Retrieve text refresh time.")]
            HRESULT refresh([in] long val);
            [id(0x6002000c), propget, helpstring("Retrieve text size.")]
            HRESULT size([out, retval] long* val);
            [id(0x6002000c), propput, helpstring("Retrieve text size.")]
            HRESULT size([in] long val);
            [id(0x6002000e), propget, helpstring("Retrieve timeout.")]
            HRESULT timeout([out, retval] long* val);
            [id(0x6002000e), propput, helpstring("Retrieve timeout.")]
            HRESULT timeout([in] long val);
            [id(0x60020010), propget, helpstring("Retrieve text abcissa.")]
            HRESULT x([out, retval] long* val);
            [id(0x60020010), propput, helpstring("Retrieve text abcissa.")]
            HRESULT x([in] long val);
            [id(0x60020012), propget, helpstring("Retrieve text ordinate.")]
            HRESULT y([out, retval] long* val);
            [id(0x60020012), propput, helpstring("Retrieve text ordinate.")]
            HRESULT y([in] long val);
        };
    
        [
          odl,
          uuid(54613049-40BF-4035-9E70-0A9312C0188D),
          helpstring("VLC Playlist APIs"),
          dual,
          oleautomation
        ]
        interface IVLCPlaylist : IDispatch {
            [id(0x60020000), propget, hidden, helpstring("Returns number of items in playlist. (deprecated)")]
            HRESULT itemCount([out, retval] long* count);
            [id(0x60020001), propget, helpstring("Returns whether playback displays video.")]
            HRESULT isPlaying([out, retval] VARIANT_BOOL* playing);
            [id(0x60020002), propget, helpstring("Returns index of current item in playlist.")]
            HRESULT currentItem([out, retval] long* index);
            [id(0x60020003), helpstring("Add a playlist item.")]
            HRESULT add(
                            [in] BSTR uri, 
                            [in, optional] VARIANT name, 
                            [in, optional] VARIANT options, 
                            [out, retval] long* itemId);
            [id(0x60020004), helpstring("Play/Resume the playlist.")]
            HRESULT play();
            [id(0x60020005), helpstring("Play item in playlist.")]
            HRESULT playItem([in] long itemId);
            [id(0x60020006), helpstring("Pause the playlist.")]
            HRESULT pause();
            [id(0x60020007), helpstring("Play/Pause current clip.")]
            HRESULT togglePause();
            [id(0x60020008), helpstring("Stop current clip.")]
            HRESULT stop();
            [id(0x60020009), helpstring("Advance to next item in playlist.")]
            HRESULT next();
            [id(0x6002000a), helpstring("Advance to previous item in playlist.")]
            HRESULT prev();
            [id(0x6002000b), hidden, helpstring("Remove all items from playlist. (deprecated)")]
            HRESULT clear();
            [id(0x6002000c), hidden, helpstring("Remove item from playlist. (deprecated)")]
            HRESULT removeItem([in] long item);
            [id(0x6002000d), propget, helpstring("Returns the playlist items collection object.")]
            HRESULT items([out, retval] IVLCPlaylistItems** obj);
        };
    
        [
          odl,
          uuid(FD37FE32-82BC-4A25-B056-315F4DBB194D),
          helpstring("VLC Playlist Items collection"),
          dual,
          oleautomation
        ]
        interface IVLCPlaylistItems : IDispatch {
            [id(0x60020000), propget, helpstring("Returns number of items in playlist.")]
            HRESULT count([out, retval] long* count);
            [id(0x60020001), helpstring("Remove all items from playlist.")]
            HRESULT clear();
            [id(0x60020002), helpstring("remove item from playlist.")]
            HRESULT remove([in] long itemId);
        };
    
        [
          odl,
          uuid(465E787A-0556-452F-9477-954E4A940003),
          helpstring("VLC Subtitle APIs"),
          dual,
          oleautomation
        ]
        interface IVLCSubtitle : IDispatch {
            [id(0x60020000), propget, helpstring("Returns video subtitle used.")]
            HRESULT track([out, retval] long* spu);
            [id(0x60020000), propput, helpstring("Returns video subtitle used.")]
            HRESULT track([in] long spu);
            [id(0x60020002), propget, helpstring("Returns the number of video subtitles available.")]
            HRESULT count([out, retval] long* spuNumber);
            [id(0x60020003), helpstring("Returns video subtitle name.")]
            HRESULT description(
                            [in] long nameID, 
                            [out, retval] BSTR* name);
        };
    
        [
          odl,
          uuid(0AAEDF0B-D333-4B27-A0C6-BBF31413A42E),
          helpstring("VLC Video APIs"),
          dual,
          oleautomation
        ]
        interface IVLCVideo : IDispatch {
            [id(0x60020000), propget, helpstring("Returns/sets the fullscreen state.")]
            HRESULT fullscreen([out, retval] VARIANT_BOOL* fullscreen);
            [id(0x60020000), propput, helpstring("Returns/sets the fullscreen state.")]
            HRESULT fullscreen([in] VARIANT_BOOL fullscreen);
            [id(0x60020002), propget, helpstring("Returns video original width.")]
            HRESULT width([out, retval] long* width);
            [id(0x60020003), propget, helpstring("Returns video original height.")]
            HRESULT height([out, retval] long* height);
            [id(0x60020004), propget, helpstring("Returns video aspect ratio.")]
            HRESULT aspectRatio([out, retval] BSTR* aspect);
            [id(0x60020004), propput, helpstring("Returns video aspect ratio.")]
            HRESULT aspectRatio([in] BSTR aspect);
            [id(0x60020006), propget, helpstring("Returns video subtitle used.")]
            HRESULT subtitle([out, retval] long* spu);
            [id(0x60020006), propput, helpstring("Returns video subtitle used.")]
            HRESULT subtitle([in] long spu);
            [id(0x60020008), propget, helpstring("Returns crop filter geometry.")]
            HRESULT crop([out, retval] BSTR* geometry);
            [id(0x60020008), propput, helpstring("Returns crop filter geometry.")]
            HRESULT crop([in] BSTR geometry);
            [id(0x6002000a), propget, helpstring("Returns teletext page used.")]
            HRESULT teletext([out, retval] long* page);
            [id(0x6002000a), propput, helpstring("Returns teletext page used.")]
            HRESULT teletext([in] long page);
            [id(0x6002000c), helpstring("toggle fullscreen/windowed state.")]
            HRESULT toggleFullscreen();
            [id(0x6002000d), helpstring("take video snapshot and save it into picture object.")]
            HRESULT takeSnapshot([out, retval] IPictureDisp** picture);
            [id(0x6002000e), helpstring("toggle teletext transparent state.")]
            HRESULT toggleTeletext();
            [id(0x6002000f), propget, helpstring("Returns the marquee object.")]
            HRESULT marquee([out, retval] IVLCMarquee** obj);
            [id(0x60020010), propget, helpstring("Returns the logo object.")]
            HRESULT logo([out, retval] IVLCLogo** obj);
            [id(0x60020011), propget, helpstring("Returns the logo object.")]
            HRESULT deinterlace([out, retval] IVLCDeinterlace** obj);
        };
    
        [
          odl,
          uuid(7BF80981-BF32-101A-8BBB-00AA00300CAB)
        ]
        interface IPictureDisp : IDispatch {
        };
    
        [
          odl,
          uuid(2D719729-5333-406C-BF12-8DE787FD65E3),
          helpstring("VLC Control"),
          dual,
          oleautomation
        ]
        interface IVLCControl2 : IDispatch {
            [id(0x60020000), propget, helpstring("Returns/sets a value that determines whether the playlist is looped")]
            HRESULT AutoLoop([out, retval] VARIANT_BOOL* AutoLoop);
            [id(0x60020000), propput, helpstring("Returns/sets a value that determines whether the playlist is looped")]
            HRESULT AutoLoop([in] VARIANT_BOOL AutoLoop);
            [id(0x60020002), propget, helpstring("Returns/sets a value that determines whether the playlist is played on startup")]
            HRESULT AutoPlay([out, retval] VARIANT_BOOL* AutoPlay);
            [id(0x60020002), propput, helpstring("Returns/sets a value that determines whether the playlist is played on startup")]
            HRESULT AutoPlay([in] VARIANT_BOOL AutoPlay);
            [id(0x60020004), propget, helpstring("Returns/sets the base URL for relative paths")]
            HRESULT BaseURL([out, retval] BSTR* url);
            [id(0x60020004), propput, helpstring("Returns/sets the base URL for relative paths")]
            HRESULT BaseURL([in] BSTR url);
            [id(0x60020006), propget, helpstring("Returns/sets playback start time of URL.")]
            HRESULT StartTime([out, retval] long* seconds);
            [id(0x60020006), propput, helpstring("Returns/sets playback start time of URL.")]
            HRESULT StartTime([in] long seconds);
            [id(0x60020008), propget, helpstring("Returns/sets the default MRL in playlist")]
            HRESULT MRL([out, retval] BSTR* MRL);
            [id(0x60020008), propput, helpstring("Returns/sets the default MRL in playlist")]
            HRESULT MRL([in] BSTR MRL);
            [id(0x6002000a), propget, helpstring("Returns the VLC version")]
            HRESULT VersionInfo([out, retval] BSTR* version);
            [id(0x6002000b), helpstring("Returns the VLC version")]
            HRESULT getVersionInfo([out, retval] BSTR* version);
            [id(0x6002000c), propget, helpstring("Returns/sets a value that determines whether viewing area is visible or hidden.")]
            HRESULT Visible([out, retval] VARIANT_BOOL* Visible);
            [id(0x6002000c), propput, helpstring("Returns/sets a value that determines whether viewing area is visible or hidden.")]
            HRESULT Visible([in] VARIANT_BOOL Visible);
            [id(0x6002000e), propget, helpstring("Returns/sets default audio volume.")]
            HRESULT volume([out, retval] long* volume);
            [id(0x6002000e), propput, helpstring("Returns/sets default audio volume.")]
            HRESULT volume([in] long volume);
            [id(0x60020010), propget, helpstring("Returns/sets background color.")]
            HRESULT BackColor([out, retval] unsigned long* BackColor);
            [id(0x60020010), propput, helpstring("Returns/sets background color.")]
            HRESULT BackColor([in] unsigned long BackColor);
            [id(0x60020012), propget, helpstring("Returns/sets visibility of the toolbar")]
            HRESULT Toolbar([out, retval] VARIANT_BOOL* Visible);
            [id(0x60020012), propput, helpstring("Returns/sets visibility of the toolbar")]
            HRESULT Toolbar([in] VARIANT_BOOL Visible);
            [id(0x60020014), propget, helpstring("Returns the audio object.")]
            HRESULT audio([out, retval] IVLCAudio** obj);
            [id(0x60020015), propget, helpstring("Returns the input object.")]
            HRESULT input([out, retval] IVLCInput** obj);
            [id(0x60020016), propget, helpstring("Returns the playlist object.")]
            HRESULT playlist([out, retval] IVLCPlaylist** obj);
            [id(0x60020017), propget, helpstring("Returns the subtitle object.")]
            HRESULT subtitle([out, retval] IVLCSubtitle** obj);
            [id(0x60020018), propget, helpstring("Returns the video object.")]
            HRESULT video([out, retval] IVLCVideo** obj);
            [id(0x60020019), propget, helpstring("Returns/sets availability of fullscreen mode.")]
            HRESULT FullscreenEnabled([out, retval] VARIANT_BOOL* enabled);
            [id(0x60020019), propput, helpstring("Returns/sets availability of fullscreen mode.")]
            HRESULT FullscreenEnabled([in] VARIANT_BOOL enabled);
            [id(0x6002001b), propget, helpstring("Returns the media description object.")]
            HRESULT mediaDescription([out, retval] IVLCMediaDescription** obj);
            [id(0x6002001c), propget, helpstring("Returns/sets visibility of the VLC branding.")]
            HRESULT Branding([out, retval] VARIANT_BOOL* Visible);
            [id(0x6002001c), propput, helpstring("Returns/sets visibility of the VLC branding.")]
            HRESULT Branding([in] VARIANT_BOOL Visible);
        };
    
        [
          odl,
          uuid(796A2C2D-5B11-4FB5-9077-56D5E674972B),
          helpstring("VLC Media Description"),
          dual,
          oleautomation
        ]
        interface IVLCMediaDescription : IDispatch {
            [id(0x60020000), propget]
            HRESULT title([out, retval] BSTR* val);
            [id(0x60020001), propget]
            HRESULT artist([out, retval] BSTR* val);
            [id(0x60020002), propget]
            HRESULT genre([out, retval] BSTR* val);
            [id(0x60020003), propget]
            HRESULT copyright([out, retval] BSTR* val);
            [id(0x60020004), propget]
            HRESULT album([out, retval] BSTR* val);
            [id(0x60020005), propget]
            HRESULT trackNumber([out, retval] BSTR* val);
            [id(0x60020006), propget]
            HRESULT description([out, retval] BSTR* val);
            [id(0x60020007), propget]
            HRESULT rating([out, retval] BSTR* val);
            [id(0x60020008), propget]
            HRESULT date([out, retval] BSTR* val);
            [id(0x60020009), propget]
            HRESULT setting([out, retval] BSTR* val);
            [id(0x6002000a), propget]
            HRESULT url([out, retval] BSTR* val);
            [id(0x6002000b), propget]
            HRESULT language([out, retval] BSTR* val);
            [id(0x6002000c), propget]
            HRESULT nowPlaying([out, retval] BSTR* val);
            [id(0x6002000d), propget]
            HRESULT publisher([out, retval] BSTR* val);
            [id(0x6002000e), propget]
            HRESULT encodedBy([out, retval] BSTR* val);
            [id(0x6002000f), propget]
            HRESULT artworkURL([out, retval] BSTR* val);
            [id(0x60020010), propget]
            HRESULT trackID([out, retval] BSTR* val);
        };
    
        [
          uuid(DF48072F-5EF8-434E-9B40-E2F3AE759B5F),
          helpstring("Event interface for VLC control")
        ]
        dispinterface DVLCEvents {
            properties:
            methods:
                [id(0x000000c8), helpstring("Idle state")]
                void MediaPlayerNothingSpecial();
                [id(0x000000c9), helpstring("Opening media")]
                void MediaPlayerOpening();
                [id(0x000000ca), helpstring("Buffering media")]
                void MediaPlayerBuffering([in] long cache);
                [id(0x000000cb), helpstring("Media is playing")]
                void MediaPlayerPlaying();
                [id(0x000000cc), helpstring("Media is paused")]
                void MediaPlayerPaused();
                [id(0x000000cd), helpstring("Forward playback")]
                void MediaPlayerForward();
                [id(0x000000ce), helpstring("Backward playback")]
                void MediaPlayerBackward();
                [id(0x000000cf), helpstring("An error has been encountered")]
                void MediaPlayerEncounteredError();
                [id(0x000000d0), helpstring("End of playback reached")]
                void MediaPlayerEndReached();
                [id(0x000000d1), helpstring("Playback stopped")]
                void MediaPlayerStopped();
                [id(0x000000d2), helpstring("Time changed")]
                void MediaPlayerTimeChanged([in] long time);
                [id(0x000000d3), helpstring("Position changed")]
                void MediaPlayerPositionChanged([in] single position);
                [id(0x000000d4), helpstring("Seek changed")]
                void MediaPlayerSeekableChanged([in] VARIANT_BOOL seekable);
                [id(0x000000d5), helpstring("Pause setting changed")]
                void MediaPlayerPausableChanged([in] VARIANT_BOOL pausable);
                [id(0x000000d6), helpstring("Media changed")]
                void MediaPlayerMediaChanged();
                [id(0x000000d7), helpstring("Title changed")]
                void MediaPlayerTitleChanged([in] int title);
                [id(0x000000d8), helpstring("Length changed")]
                void MediaPlayerLengthChanged([in] long length);
        };
    
        typedef [public]
        VLCPlaylistMode eVLCPlaylistMode;
    
        typedef enum {
            VLCPlayListInsert = 1,
            VLCPlayListInsertAndGo = 9,
            VLCPlayListReplace = 2,
            VLCPlayListReplaceAndGo = 10,
            VLCPlayListAppend = 4,
            VLCPlayListAppendAndGo = 12,
            VLCPlayListCheckInsert = 16
        } VLCPlaylistMode;
    
        [
          uuid(9BE31822-FDAD-461B-AD51-BE1D1C159921),
          helpstring("VLC control"),
          control
        ]
        coclass VLCPlugin2 {
            [default] interface IVLCControl2;
            [default, source] dispinterface DVLCEvents;
        };
    };
    
    


  • Hi, perhaps when you installed VLC the ActiveX dll didn't got registered (don't think a normal installation does that), so first of all, open an Administrator/Elevated CMD window:
    regsvr32 C:\Program Files\VideoLan\VLC\axvlc.dll
    (must be Administrator otherwise you'll get error 0x80040201)

    Then, when dealing with COM, the big wheels are always at the end of the IDL file, i.e. try something like this:

    QAxWidget vlc("{9BE31822-FDAD-461B-AD51-BE1D1C159921}");
    QString vlcVersion = vlc.property("VersionInfo").toString();
    


  • Thank you, the first part is working.

    QAxWidget vlc("{9BE31822-FDAD-461B-AD51-BE1D1C159921}");
    QString vlcVersion = vlc.property("VersionInfo").toString();
    

    The above code is also working.

    How can I generate CPP and .H file with all interface description?

    
    dumpcpp -getfile {9BE31822-FDAD-461B-AD51-BE1D1C159921}
    
    

    isn't working.

    My ultimate goal is to use the play() method from this interface:

    interface IVLCPlaylist;
    

    How can I call methods of certain interfaces from Qt?

    Thanks.



  • Don't worry, you can still use dumpcpp. it's beginning to show its age though, you have to "spoon-feed" it by specifying the .dll explicitly:
    dumpcpp "C:\Program Files\VideoLAN\VLC\axvlc.dll"



  • Thanks Hskoglund,

    so far so good.

    dumpcpp generated .cpp and .h files and I included them in my .pro and #include "axvcl.h" in my MainWindow.cpp.

    However, compiling fails at:

    mainwindow.obj : error LNK2019: unresolved external symbol "public: static struct QMetaObject const AXVLC::VLCPlugin2::staticMetaObject" (?staticMetaObject@VLCPlugin2@AXVLC@@2UQMetaObject@@B) referenced in function "public: virtual struct QMetaObject const * __cdecl AXVLC::VLCPlugin2::metaObject(void)const " (?metaObject@VLCPlugin2@AXVLC@@UEBAPEBUQMetaObject@@XZ)
    release\test.exe : fatal error LNK1120: 2 unresolved externals
    


  • Hmmm, you're sure you got axvlc.cpp listed in your .pro file, omitting that -> linking errors,
    It should look something like this:
    SOURCES += main.cpp mainwindow.cpp axvlc.cpp
    (also be sure to hit Run qmake to make sure Qt sees axvlc.cpp)

    axvlc.h you don't need in your .pro file, it suffices to #include it, and with it, the code above becomes nicer:

    AXVLC::VLCPlugin2 vlc;
    QString vlcVersion = vlc.VersionInfo();
    


  • yes axvlc.cpp in included in SOURCES.

    I tried another newly created project I got almost the same errors:

    qt_metacast@IVLCPlaylist@AXVLC@@UEAAPEAXPEBD@Z)
    mainwindow.obj : error LNK2001: unresolved external symbol "public: virtual void * __cdecl AXVLC::VLCPlugin2::qt_metacast(char const *)" (?qt_metacast@VLCPlugin2@AXVLC@@UEAAPEAXPEBD@Z)
    
    mainwindow.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const AXVLC::IVLCPlaylist::staticMetaObject" (?staticMetaObject@IVLCPlaylist@AXVLC@@2UQMetaObject@@B)
    
    mainwindow.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const AXVLC::VLCPlugin2::staticMetaObject" (?staticMetaObject@VLCPlugin2@AXVLC@@2UQMetaObject@@B)
    
    debug\t1.exe : fatal error LNK1120: 4 unresolved externals
    jom: C:\devtest.qt560rc\build-LiveNVRPlayer-QtxMsvc2013x64bit-Debug\Makefile.Debug [debug\t1.exe] Error 1120
    
    jom: C:\devtest.qt560rc\build-t1-QtxMsvc2013x64bit-Debug\Makefile [debug] Error 2
    19:13:36: The process "C:\Qt\Qt5.6.0rc\Tools\QtCreator\bin\jom.exe" exited with code 2.
    Error while building/deploying project t1 (kit: QtxMsvc2013x64bit)
    When executing step "Make"
    

    Do you think axvlc.h (axvlc.h on pastebin) and axvlc.cpp axvlc.cpp on pastebin was generated properly?

    Thanks



  • The files axvvlc.h and axvlc.cpp look kosher to me, should work.
    If that SOURCES ... line is fine, then also in your project's sidebar in Qt Projects, in the Sources tree folder, there should appear a C++ file icon for axvlc.pp (same as for main.cpp and mainwindow.cpp), do you have it?
    Also, try building in Relaease mode instead of Debug



  • Yes I have axvlc.cpp on the sources tree, also axvlc.h on the headers tree.

    Hmm, this is funny. Release mode compiles just fine.



  • Indeed, debug build should work as well. Hmmm, try switching to Debug, and do Clean All, run Qmake, Rebuild All. Maybe do that twice for good measure.
    Anyway, now you're up and running in Release mode, happy VLC hacking!



Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.