帮看一下哪里有问题!

wody1589828 2009-09-01 12:50:01
写播放器,添加多个音乐文件能够实现,编译都通过,但是不能播放了,我把代码贴一下,大家帮个忙
下面的代码是播放器上面已经有了音乐列表,
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);//播放歌曲

大家帮忙看看,不胜感激!
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2009-09-01
  • 打赏
  • 举报
回复
不错,
wody1589828 2009-09-01
  • 打赏
  • 举报
回复
那我再把代码贴全点,大家再帮忙看看
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));//获得地址

}
}
WuXinyang 2009-09-01
  • 打赏
  • 举报
回复
MCI播放的啊,用MCI前要注意检查一下有没有声卡.
xgchaohao 2009-09-01
  • 打赏
  • 举报
回复
不行就一行行的加断点调试看看为什么没有数据错在哪里
wody1589828 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 feilinhe 的回复:]
仅凭GetShortPathName(J,OpenName,sizeof(OpenName)/sizeof(char));//获得地址
发现不了问题啊,LZ还是debug调试,查看调用堆栈吧~
[/Quote]


那如何查看调用堆栈呢,我对调试不太懂,有没有调试方面的教程呢,我在网上搜了搜,看不太懂
feilinhe 2009-09-01
  • 打赏
  • 举报
回复
仅凭GetShortPathName(J,OpenName,sizeof(OpenName)/sizeof(char));//获得地址
发现不了问题啊,LZ还是debug调试,查看调用堆栈吧~
songsu 2009-09-01
  • 打赏
  • 举报
回复
阔以。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧