之前void CDSAdpcmPlayerView::OnFile()这个函数是实现格式转换的,紧跟着下面的这个函数是做什么的?

void CDSAdpcmPlayerView::AdpcmPlay(char *flnm)//ADPCM自适应差分脉冲编码调制
{
int rtn;
char srcflnm[1024];
char dstflnm[1024];
char *pc;
char *ps;
char dataflnm[1024];
char lastflnm[1024];

GetModuleFileName(NULL, dataflnm, sizeof(dataflnm));
pc = dataflnm + strlen(dataflnm);
while (*pc != '\\') pc--;
sprintf(pc, "\\DSAdpcmPlayer.dat");

GetPrivateProfileString("System", "LastFile", NULL, lastflnm, sizeof(lastflnm), dataflnm);
if (strcmp(lastflnm, "") != 0)
{
DeleteFile(lastflnm);
}

sprintf(srcflnm, "%s", flnm);
ps = srcflnm + strlen(srcflnm);
while (*ps != '\\') ps--;

GetModuleFileName(NULL, dstflnm, sizeof(dstflnm));
pc = dstflnm + strlen(dstflnm);
while (*pc != '\\') pc--;
sprintf(pc, "%s", ps);
pc = dstflnm + strlen(dstflnm);
while (*pc != '.') pc--;
sprintf(pc, ".wav");

rtn = DSAdpcmFileToPcmFile(srcflnm, dstflnm);
if (rtn != DS_RTN_OK)
{
AfxMessageBox("文件格式转换错误!");
return;
}

WritePrivateProfileString("System", "LastFile", dstflnm, dataflnm);
ShellExecute(NULL, "open", dstflnm, NULL, NULL, SW_MAXIMIZE);// 运行并控制一个外部程序 执行成功会返回应用程序句柄
::PostMessage(hwnd, WM_CLOSE, 0, 0);// 用于将一条消息放入到消息队列中 如果函数调用成功,返回非零
}
希望能帮我解释一下 我看着里面的程序和之前的程序还有点相似之处?有点困惑,O(∩_∩)O谢谢!

DSAdpcmPlayer.dat 实际是一个INI配置信息文件,这个函数依然是将参数传递的文件名进行DSAdpcmFileToPcmFile调用,完成编码转换,只是记录到INI文件中,而不是写到列表视图上。

没对比完整工程,目测这可能是命令行参数处理函数,因为最后的语句是直接关闭窗口,应该是转换完成并记录INI之后,直接退出。追问

这个函数是完成编码转换的吗,那上面的那个函数也不是完成格式转换的吗,这个函数中DSAdpcmPlayer.dat 完成一个INI配置信息文件 这个有什么作用呢怎么越来越觉得糊涂啊

追答

这个函数,是通过参数获取文件名,转换后退出。理论上,应该是命令行处理函数,不明白?

追问

之前的void CDSAdpcmPlayerView::OnFile()这个函数也是进行原文件和目标文件转换的啊 突然下面的这个函数又是实现获取文件名 顺序不是都颠倒了吗 真的不怎么明白啊

追答

两个没关系,入口不同。
OnFile是通过菜单打开。这个是通过命令行或参数。

追问

这个是通过命令行或参数 这个函数必须要吗

追答

不是必须的。
关键是看都有哪里调用它,如果只有命令行调用,那么如果你不需要命令行支持,可以忽略它。

追问

命令行调用是怎么操作的,或是什么意思啊!

追答

命令行参数,这个没法这里描述,百度搜这个词儿吧,好多解释。

来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
相似回答