문제

Windows Media Player와 상호 작용하기 위해 COM Wrapper를 사용하고 있습니다.

어떻게든 플레이어를 감싸기 위해 AxHost를 사용하고 있습니다. 저에게는 이 모든 것이 후드 아래의 마법일 뿐입니다^^

AxHost.AttachInterfaces는 다음과 같습니다.

    protected override void AttachInterfaces() 
    {
        try 
        {   
            //Get the IOleObject for Windows Media Player.
            IOleObject oleObject = this.GetOcx() as IOleObject;

            //Set the Client Site for the WMP control.
            oleObject.SetClientSite(this as IOleClientSite);

            Player = this.GetOcx() as WMPLib.WindowsMediaPlayer; 
...

Windows Forms 컨트롤에서 이 AxHost를 호스팅하는 한 모든 것이 작동합니다.하지만 생성자에서 이벤트를 연결할 수는 없습니다.

예를 들어 다음은 작동하지 않습니다.

    public WMPMediaRating()
    {
        var remote = new WMPRemote.RemotedWindowsMediaPlayer();
        _WMP = remote.Player;

        _WMP.MediaChange += new _WMPOCXEvents_MediaChangeEventHandler(_WMP_MediaChange);
    }

Remote.Player는 항상 null이고 프로그램은 NullReferencesException으로 인해 충돌합니다.

AttachInterfaces()의 코드는 Form이 그려진 후에나 다른 모든 작업이 완료된 후에만 실행됩니다.

AttachInterfaces()를 직접 호출해 보았지만 GetOcx()가 아무것도 반환하지 않기 때문에 작동하지 않았습니다.


그렇다면 Windows Forms 없이 AxHost 상속 컨트롤을 인스턴스화하여 콘솔 응용 프로그램 등에서 사용하려면 어떻게 해야 합니까?

도움이 되었습니까?

해결책

참고:콘솔 응용 프로그램에서 숨겨진 창을 사용하는 것을 누구도 막을 수 없습니다.

Windows가 아닌 응용 프로그램에서는 미디어 플레이어를 호스팅할 수 없습니다. 호스팅이 필요합니다.음악을 재생하려는 경우 미디어 그래프를 사용하여 음악 파일을 렌더링(재생)하는 그래프를 만들 수 있습니다. 추가 호스팅이 필요하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top