#c #mfc #visual-studio-2019 #activex #windows-media-player
#c #mfc #visual-studio-2019 #activex #windows-media-player
Вопрос:
Я пытаюсь встроить WMP во вновь созданное приложение на основе диалогового окна MFC с использованием Visual Studio 2019. Вот шаги, которые я выполняю:
- Создать новый проект
- Перейдите в представление ресурсов и нажмите Вставить элемент управления ActiveX
- Выберите проигрыватель Windows Media и нажмите OK
- Измените идентификатор вновь созданного элемента WMP на что-то менее общее, например
WMP_Player
- Щелкните правой кнопкой мыши элемент WMP и выберите Добавить переменную
- Я установил имя переменной примерно так
m_wmp
- Создается новая переменная
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<
}
Итак, вы могли бы прокомментировать их.