我在vc6.0的环境下编了一个小程序,在debug下一切正常,在release下就不正常。望高手帮忙指点!
程序是基于对话框的,用一个“浏览”按钮选择文件的地址,用一个编辑框接收显示,然后对文件进行操作。代码如下:voidCMyDlg::OnButton1(){//TODO:A...
程序是基于对话框的,用一个“浏览”按钮选择文件的地址,用一个编辑框接收显示,然后对文件进行操作。代码如下:
void CMyDlg::OnButton1()
{
// TODO: Add your control notification handler code here
BROWSEINFO bi;
char Buffer[MAX_PATH + 1100];
bi.hwndOwner = NULL;
bi.pidlRoot =NULL;
bi.pszDisplayName = Buffer;
bi.lpszTitle = "请选择文件";
bi.lpfn = NULL;
bi.iImage=IDR_MAINFRAME;
LPITEMIDLIST pIDList= SHBrowseForFolder(&bi);
if(pIDList)
{
SHGetPathFromIDList(pIDList, Buffer);
m_filepath1 = Buffer;
SetDlgItemText(IDC_EDIT1,m_filepath1);
}
}
在debug时可以正常选择文件,在release下不行,有时只能选择文件夹,还有时只有桌面上的文件可供选择。想不明白啊,哪位高手帮我看看,问题出在哪里?小弟拜谢了!! 展开
void CMyDlg::OnButton1()
{
// TODO: Add your control notification handler code here
BROWSEINFO bi;
char Buffer[MAX_PATH + 1100];
bi.hwndOwner = NULL;
bi.pidlRoot =NULL;
bi.pszDisplayName = Buffer;
bi.lpszTitle = "请选择文件";
bi.lpfn = NULL;
bi.iImage=IDR_MAINFRAME;
LPITEMIDLIST pIDList= SHBrowseForFolder(&bi);
if(pIDList)
{
SHGetPathFromIDList(pIDList, Buffer);
m_filepath1 = Buffer;
SetDlgItemText(IDC_EDIT1,m_filepath1);
}
}
在debug时可以正常选择文件,在release下不行,有时只能选择文件夹,还有时只有桌面上的文件可供选择。想不明白啊,哪位高手帮我看看,问题出在哪里?小弟拜谢了!! 展开
1个回答
展开全部
BROWSEINFO bi; //指针初始化
char Buffer[MAX_PATH + 1100]; //字符初始化,不要再数组里进行运算。
切记变量一定要初始化,debug自动初始化,而release不管。
不正常接收是因为编译器的指针被悬挂了。
简单一看,是这样。
你要加异常域
try...catch...finally
要有崩溃处理。
char Buffer[MAX_PATH + 1100]; //字符初始化,不要再数组里进行运算。
切记变量一定要初始化,debug自动初始化,而release不管。
不正常接收是因为编译器的指针被悬挂了。
简单一看,是这样。
你要加异常域
try...catch...finally
要有崩溃处理。
更多追问追答
追问
首先感谢你的回答!我是新手,很多不清楚,能不能告诉我具体怎么改啊?多谢了!
追答
哦,抱歉,可能我刚才回答的不清楚,我补充一下。
BROWSEINFO bi=0;//BROWSEINFO bi={0};也可以,规范一些
char Buffer[MAX_PATH + 1100];//Buffer也可以赋给0
MAX_PATH + 1100,可以用一个一开辟的全局变量,不要再数组下标进行计算。
整段代码,加try{}里,抛出catch()异常,在finally里,把你所做得修改都做上数值(因为我不知道是不是还有其它代码),如果没有可以不要。
这样程序至少更健壮一些。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询