You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio中Windows Media Player音乐播放器的C2664错误解决

解决C++/CLI音乐播放器中AxWindowsMediaPlayer URL赋值的C2664错误

嘿,我看你在做学校的音乐播放器项目时遇到了类型转换的问题,这个错误其实是因为你对多选文件的变量类型处理错了,咱们一步步来解决:

首先,先明确你遇到的错误:

error C2664: 'AxWMPLib::AxWindowsMediaPlayer::URL::set' : cannot convert parameter 1 from 'wchar_t' to 'System::String ^'

问题根源

你现在声明的files和paths是单个String^类型,但当你启用文件多选时,需要用数组类型来存储所有选中的文件名和路径。原来的代码里,paths[listBox1->SelectedIndex]实际上是在取单个字符串的某个字符(wchar_t),而不是你想要的对应索引的文件路径,这就导致了类型不匹配的错误。

修复步骤

  1. 修正变量类型
    把类里的files和paths声明改成数组类型:
array<String^>^ files;
array<String^>^ paths;
  1. 正确获取多选文件信息
    在btnOpen_Click方法里,要先设置Multiselect=true再弹出对话框,还要判断用户是否确认选择了文件,然后用SafeFileNames和FileNames获取数组形式的文件名和路径:
private: System::Void btnOpen_Click(System::Object^ sender, System::EventArgs^ e) {
    OpenFileDialog ^ open = gcnew OpenFileDialog();
    open->Multiselect = true; // 先开启多选功能
    if(open->ShowDialog() == System::Windows::Forms::DialogResult::OK) {
        files = open->SafeFileNames; // 获取所有选中文件的文件名数组
        paths = open->FileNames;     // 获取所有选中文件的完整路径数组
        listBox1->Items->Clear();    // 清空列表,避免重复添加
        for(int i=0; i < files->Length ; i++) {
            listBox1->Items->Add(files[i]);
        }
    }
}
  1. 保留原有的列表选择事件逻辑
    你的listBox1_SelectedIndexChanged方法逻辑是对的,现在paths是数组,paths[listBox1->SelectedIndex]会返回正确的String^类型路径,赋值给player->URL就不会再报错了:
private: System::Void listBox1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) {
    player->URL = paths[listBox1->SelectedIndex];
    player->Ctlcontrols->play();
}

另外补充一点:原来的代码里你先调用了ShowDialog()再设置Multiselect=true,这顺序是反的,必须先开启多选再弹出对话框,否则多选功能不会生效。

内容的提问来源于stack exchange,提问作者Noobie983

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:45:52