Встраивание проигрывателя Windows Media в MFC

#c #mfc #visual-studio-2019 #activex #windows-media-player

#c #mfc #visual-studio-2019 #activex #windows-media-player

Вопрос:

Я пытаюсь встроить WMP во вновь созданное приложение на основе диалогового окна MFC с использованием Visual Studio 2019. Вот шаги, которые я выполняю:

  1. Создать новый проект
  2. Перейдите в представление ресурсов и нажмите Вставить элемент управления ActiveX
  3. Выберите проигрыватель Windows Media и нажмите OK
  4. Измените идентификатор вновь созданного элемента WMP на что-то менее общее, например WMP_Player
  5. Щелкните правой кнопкой мыши элемент WMP и выберите Добавить переменную
  6. Я установил имя переменной примерно так m_wmp
  7. Создается новая переменная CWMP_Player.h и CWMP_Player.cpp добавляется в проект.

Я пытаюсь создать проект, и он терпит неудачу. Внутри CWMP_Player.h есть 354 ошибки, такие как:

Серьезность Описание кода Состояние подавления строки файла проекта

Ошибка C2535 BOOL CWMP_Player::get_isAvailable(LPCTSTR) : функция-член уже определена или объявлена WinMediaPl

Ошибка C2377 BOOL : переопределение; typedef не может быть перегружен любым другим символом WinMediaPl

Ошибка C2660 CWMP_Player::InvokeHelper : функция не принимает 5 аргументов WinMediaPl

В то время CWMP_Player.cpp как он почти пуст, содержит только пару включений (один из которых является pch.h ) и только эту строку:

IMPLEMENT_DYNCREATE(CWMP_Player, CWnd)

Я забыл шаг? Должен ли я включать что-то в этот или другой файл?

Ответ №1:

На мой взгляд, код, автоматически добавляемый в файл класса, добавленный VS2019, конфликтует с определением в WinMediaPl . После сравнения кода, автоматически добавленного VS2017 и VS2019, я обнаружил, что автоматически добавленный ниже код является избыточным в CWMP_Player.h том или ином .h .

 // Operations
public:
// IWMPPlaylist

// Functions
//

    long get_count()
    {
        long resu<
        InvokeHelper(0xC9, DISPATCH_PROPERTYGET, VT_I4, (void*)amp;result, nullptr);
        return resu<
    }
    CString get_name()
    {
        CString resu<
        InvokeHelper(0xCA, DISPATCH_PROPERTYGET, VT_BSTR, (void*)amp;result, nullptr);
        return resu<
    }

...

    VARIANT getItemInfoByType(long lCollectionIndex, LPCTSTR bstrType, LPCTSTR bstrLanguage, long lAttributeIndex)
    {
        VARIANT resu<
        static BYTE parms[] = VTS_I4 VTS_BSTR VTS_BSTR VTS_I4 ;
        InvokeHelper(0x5AE, DISPATCH_METHOD, VT_VARIANT, (void*)amp;result, parms, lCollectionIndex, bstrType, bstrLanguage, lAttributeIndex);
        return resu<
    }
 

Итак, вы могли бы прокомментировать их.