大家好~!
我遇到一个很奇怪的问题。
我在菜单上新建了一项并在view中给出点击她的处理函数,并在起处理函数中做了相应的操作(把最后的结果,写入磁盘文件)。运行发现。点击菜单时,系统报错。可是在处理函数的写文件操作正确完成。
单步调试后发现,在菜单的处理函数中都没有问题,可是在该函数被调用完后,发现程序回到了它的上层函数AFXAPI _AfxDispatchCmdMsg(),然后到上层函数CCmdTarget::OnCmdMsg(),然后到CView::OnCmdMsg(),然后到CFrameWnd::OnCmdMsg(),然后到CWnd::OnCommand(),然后到CWnd::OnWndMsg(),然后CWnd::WindowProc(),然后LRESULT AFXAPI AfxCallWndProc(),LRESULT CALLBACK AfxWndProc(),LRESULT CALLBACK AfxWndProcBase(),最后就进入一段汇编语言代码,然后走几步就出错了。
MY GOD,VC我也不是很精通,我还一直以为我只要负责编写菜单处理函数那一部分代码来着,其他的想消息的分发,不都是系统做的吗?可是现在这种情形,让我怎么调呀~~~~:(
大家有遇到过这样的情况吗?知道是怎么回事吗?
还有一个小问题,想菜单的处理函数是否一定要为void 类型呀,如果不是,比如改成int类型,是否会有意外发生呢?
thank you all in advance~!!
我遇到一个很奇怪的问题。
我在菜单上新建了一项并在view中给出点击她的处理函数,并在起处理函数中做了相应的操作(把最后的结果,写入磁盘文件)。运行发现。点击菜单时,系统报错。可是在处理函数的写文件操作正确完成。
单步调试后发现,在菜单的处理函数中都没有问题,可是在该函数被调用完后,发现程序回到了它的上层函数AFXAPI _AfxDispatchCmdMsg(),然后到上层函数CCmdTarget::OnCmdMsg(),然后到CView::OnCmdMsg(),然后到CFrameWnd::OnCmdMsg(),然后到CWnd::OnCommand(),然后到CWnd::OnWndMsg(),然后CWnd::WindowProc(),然后LRESULT AFXAPI AfxCallWndProc(),LRESULT CALLBACK AfxWndProc(),LRESULT CALLBACK AfxWndProcBase(),最后就进入一段汇编语言代码,然后走几步就出错了。
MY GOD,VC我也不是很精通,我还一直以为我只要负责编写菜单处理函数那一部分代码来着,其他的想消息的分发,不都是系统做的吗?可是现在这种情形,让我怎么调呀~~~~:(
大家有遇到过这样的情况吗?知道是怎么回事吗?
还有一个小问题,想菜单的处理函数是否一定要为void 类型呀,如果不是,比如改成int类型,是否会有意外发生呢?
thank you all in advance~!!
可以试一下啊,应该编译就不能通过。//我也没试菜单处理的代码贴出来看看呢
void CCV2View::OnBatch()
{
WIN32_FIND_DATA FileData; // Data structure describes the file found
HANDLE hSearch; // Search handle returned by FindFirstFile BOOL bFinished = FALSE;
CWzdDirDlg dlg;
char buf[MAX_PATH];
_getcwd(buf,MAX_PATH);//获取当前工作文件夹
CString dir=dlg.GetDirectory(this,buf,"选择:");
TCHAR SearchFiles[255];
_tcscpy(SearchFiles, dir);//dir为选择后的文件夹路径。
lstrcat (SearchFiles, "\\*.*");
hSearch = FindFirstFile (SearchFiles, &FileData);//找到当前路径下的第一个文件,并返回其句柄
if (hSearch == INVALID_HANDLE_VALUE){return;}
while (!bFinished)
{
TCHAR szReadPath[MAX_PATH];
_tcscpy(szReadPath, dir);//dir为选择后的文件夹路径。
lstrcat(szReadPath, "\\");
lstrcat (szReadPath, FileData.cFileName);
//szReadPath为所要读的文件的完整路径。
CString filename=FileData.cFileName;
IplImage* imga = cvLoadImage(szReadPath,1);
//应该没有问题的,1表示是大于0的,是三通道的。
if(imga){TextureProc(imga);}//对图象提取纹理特征。
if (!FindNextFile (hSearch, &FileData))
{
bFinished = TRUE;
if (GetLastError () == ERROR_NO_MORE_FILES)
{
//wsprintf (szMsg, TEXT("Found all of the files."));
}
else
{
//wsprintf (szMsg, TEXT("Unable to find next file."));
}
}
}
// Close the search handle.
FindClose (hSearch);
}
因为我的程序调用了一个函数库,所以估计在别的人那里可能用不起来,大家就帮我看一下吧。不胜感谢~!
/* CWzdDirDlg dlg;//F9 ... F5 ... F10看看问题出在哪里
char buf[MAX_PATH];
_getcwd(buf,MAX_PATH);//获取当前工作文件夹
CString dir=dlg.GetDirectory(this,buf,"选择:");*/
// IplImage* imga = cvLoadImage(szReadPath,1);
//应该没有问题的,1表示是大于0的,是三通道的。
// if(imga){TextureProc(imga);}//对图象提取纹理特征。
//应该就是上面两个地方出错了
其它在我这里没问题
我的程序调用了一个图象处理的库OPENCV,所以,可能在你那里就运行不起来啦。
但我还是发给你试试了,只能大概看看了,不过不能调就算了,也没有事,大不了,我就只能用另一种方法做啦,只不过这样的话,我的程序就要大调整了~~~:(
再次,感谢大家的回复!!!
没有收到我发给你的短信息吗?
已经超过5M了,所以----------
看来只有我自己来解决了~!
thank you all the same~!