写播放器,添加多个音乐文件能够实现,编译都通过,但是不能播放了,我把代码贴一下,大家帮个忙
下面的代码是播放器上面已经有了音乐列表,
int iCount = SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETCOUNT, 0, 0);//文件的个数
SendMessage(GetDlgItem(hwnd,IDC_LIST1), LB_SETCURSEL, iCount-1, 0);//指向最后一个文件
char J[MAX];
    int i = SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETCURSEL, 0, 0);//选定当前的文件
    SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETTEXT, i,(LPARAM)J);//将文件地址复制到缓冲区
GetShortPathName(J,OpenName,sizeof(OpenName)/sizeof(char));//获得地址我定义的OpenName是全局变量,调试之后发现OpenName中是空的,怎么回事啊?播放歌曲函数
  char cmd1[MAX];
   wsprintf(cmd1,"play %s",OpenName);
    mciSendString(cmd1,buf,sizeof(buf),NULL);//播放歌曲 大家帮忙看看,不胜感激!

解决方案 »

  1.   

    仅凭GetShortPathName(J,OpenName,sizeof(OpenName)/sizeof(char));//获得地址 
    发现不了问题啊,LZ还是debug调试,查看调用堆栈吧~
      

  2.   

    MCI播放的啊,用MCI前要注意检查一下有没有声卡.
      

  3.   

    那我再把代码贴全点,大家再帮忙看看
    void Add(HWND hwnd)
    {
     OPENFILENAME ofn;
     TCHAR szOpenFileNames[80*MAX_PATH];
     TCHAR szPath[MAX_PATH];
     TCHAR* p;
     int nLen = 0;
     ZeroMemory( &ofn, sizeof(ofn) );
     ofn.Flags = OFN_EXPLORER | OFN_ALLOWMULTISELECT | OFN_OVERWRITEPROMPT;
     ofn.lStructSize = sizeof(ofn);
     ofn.lpstrFile = szOpenFileNames;
     ofn.nMaxFile = sizeof(szOpenFileNames);
     ofn.lpstrFile[0] = '\0';
     ofn.lpstrFilter = TEXT("All Files(*.*)\0*.*\0");
     if( GetOpenFileName( &ofn ) )
     {  
      //把第一个文件名前的复制到szPath,即:
      //如果只选了一个文件,就复制到最后一个'\'
      //如果选了多个文件,就复制到第一个NULL字符
      lstrcpyn(szPath, szOpenFileNames, ofn.nFileOffset);
      //当只选了一个文件时,下面这个NULL字符是必需的.
      //这里不区别对待选了一个和多个文件的情况
      szPath[ ofn.nFileOffset ] = '\0';
      nLen = lstrlen(szPath);
      
      if( szPath[nLen-1] != '\\' )   //如果选了多个文件,则必须加上'\\'
      {
       lstrcat(szPath, TEXT("\\"));
      }
      
      p = szOpenFileNames + ofn.nFileOffset; //把指针移到第一个文件
      
      ZeroMemory(szFileName, sizeof(szFileName));
      while( *p )
      { 
       ZeroMemory(szFileName,sizeof(szFileName));  
       lstrcat(szFileName, szPath);  //给文件名加上路径  
       lstrcat(szFileName, p);    //加上文件名  
       lstrcat(szFileName, TEXT("\n")); //换行  
       SendDlgItemMessage(hwnd,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)szFileName);
       p += lstrlen(p) +1;     //移至下一个文件
       //清空szFileName的内存9
      }
       int iCount = SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETCOUNT, 0, 0);//文件的个数 
    SendMessage(GetDlgItem(hwnd,IDC_LIST1), LB_SETCURSEL, iCount-1, 0);//指向最后一个文件 
    char J[MAX]; 
        int i = SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETCURSEL, 0, 0);//选定当前的文件 
        SendMessage (GetDlgItem(hwnd,IDC_LIST1), LB_GETTEXT, i,(LPARAM)J);//将文件地址复制到缓冲区 
    GetShortPathName(J,OpenName,sizeof(OpenName)/sizeof(char));//获得地址  }
    }