在 MFC 中嵌入 Windows 媒体播放器
Embedding Windows Media Player in MFC
我正在尝试使用 Visual Studio 2019 将 WMP 嵌入到新创建的基于 MFC 对话框的应用程序中。
这些是我正在执行的步骤:
- 创建新项目
- 转到资源视图并单击“插入 ActiveX 控件”
- Select Windows 媒体播放器并单击确定
- 将新创建的 WMP 元素的 ID 更改为不太通用的内容,例如
WMP_Player
- 右键单击 WMP 元素并 select 添加变量
- 我将变量名称设置为
m_wmp
- 已创建新变量并将
CWMP_Player.h
和 CWMP_Player.cpp
添加到项目中。
我尝试构建项目但失败了。
CWMP_Player.h
内有 354 个错误,例如:
Severity Code Description Project File Line Suppression State
Error C2535 BOOL CWMP_Player::get_isAvailable(LPCTSTR)
: member function already defined or declared WinMediaPl
Error C2377 BOOL
: redefinition; typedef cannot be overloaded with any other symbol WinMediaPl
Error C2660 CWMP_Player::InvokeHelper
: function does not take 5 arguments WinMediaPl
虽然 CWMP_Player.cpp
几乎是空的,只有几个包含(一个是 pch.h
)和这一行:
IMPLEMENT_DYNCREATE(CWMP_Player, CWnd)
我是不是忘记了一步?我应该在这个文件还是另一个文件中包含一些东西?
个人认为VS2019添加的class文件中自动添加的代码与WinMediaPl
中的定义有冲突。对比VS2017和VS2019自动添加的代码,发现下面自动添加的代码在CWMP_Player.h
或其他.h
.
是多余的
// Operations
public:
// IWMPPlaylist
// Functions
//
long get_count()
{
long result;
InvokeHelper(0xC9, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, nullptr);
return result;
}
CString get_name()
{
CString result;
InvokeHelper(0xCA, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, nullptr);
return result;
}
...
VARIANT getItemInfoByType(long lCollectionIndex, LPCTSTR bstrType, LPCTSTR bstrLanguage, long lAttributeIndex)
{
VARIANT result;
static BYTE parms[] = VTS_I4 VTS_BSTR VTS_BSTR VTS_I4 ;
InvokeHelper(0x5AE, DISPATCH_METHOD, VT_VARIANT, (void*)&result, parms, lCollectionIndex, bstrType, bstrLanguage, lAttributeIndex);
return result;
}
所以,您可以将它们注释掉。
我正在尝试使用 Visual Studio 2019 将 WMP 嵌入到新创建的基于 MFC 对话框的应用程序中。 这些是我正在执行的步骤:
- 创建新项目
- 转到资源视图并单击“插入 ActiveX 控件”
- Select Windows 媒体播放器并单击确定
- 将新创建的 WMP 元素的 ID 更改为不太通用的内容,例如
WMP_Player
- 右键单击 WMP 元素并 select 添加变量
- 我将变量名称设置为
m_wmp
- 已创建新变量并将
CWMP_Player.h
和CWMP_Player.cpp
添加到项目中。
我尝试构建项目但失败了。
CWMP_Player.h
内有 354 个错误,例如:
Severity Code Description Project File Line Suppression State
Error C2535
BOOL CWMP_Player::get_isAvailable(LPCTSTR)
: member function already defined or declared WinMediaPlError C2377
BOOL
: redefinition; typedef cannot be overloaded with any other symbol WinMediaPlError C2660
CWMP_Player::InvokeHelper
: function does not take 5 arguments WinMediaPl
虽然 CWMP_Player.cpp
几乎是空的,只有几个包含(一个是 pch.h
)和这一行:
IMPLEMENT_DYNCREATE(CWMP_Player, CWnd)
我是不是忘记了一步?我应该在这个文件还是另一个文件中包含一些东西?
个人认为VS2019添加的class文件中自动添加的代码与WinMediaPl
中的定义有冲突。对比VS2017和VS2019自动添加的代码,发现下面自动添加的代码在CWMP_Player.h
或其他.h
.
// Operations
public:
// IWMPPlaylist
// Functions
//
long get_count()
{
long result;
InvokeHelper(0xC9, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, nullptr);
return result;
}
CString get_name()
{
CString result;
InvokeHelper(0xCA, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, nullptr);
return result;
}
...
VARIANT getItemInfoByType(long lCollectionIndex, LPCTSTR bstrType, LPCTSTR bstrLanguage, long lAttributeIndex)
{
VARIANT result;
static BYTE parms[] = VTS_I4 VTS_BSTR VTS_BSTR VTS_I4 ;
InvokeHelper(0x5AE, DISPATCH_METHOD, VT_VARIANT, (void*)&result, parms, lCollectionIndex, bstrType, bstrLanguage, lAttributeIndex);
return result;
}
所以,您可以将它们注释掉。