我的一个MFC单文档程序,启动时需要给定一个字符串参数来作为工作路径,从而连接相应路径下的数据库,在 App 类的 InitInstance 中通过 this->m_lpCmdLine 即可得到这个参数加以使用,但是 MFC 程序的 ProcessShellCommand(cmdInfo) 这个过程会返回 False,导致程序启动失败,弹出 “XXX不是一个合法路径” 的对话框,原因貌似也挺好理解,单文档程序往往将参数认为是该程序打开的文档名称,所以一旦你这个参数不是一个文件路径或者不是符合类型的文档,则 Doc 类处理不了,自然也就返回 False 了,想了想也没得到其他的好办法,只好暂时重载 Doc 类的 OnOpenDocument 方法,取消对文件的任何操作即可。

1
2
3
4
5
6
7
8
9
10
BOOL CIEDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
//注意:取消此处
//if (!CDocument::OnOpenDocument(lpszPathName))
// return FALSE;

// TODO: Add your specialized creation code here

return TRUE;
}

可能我这种应用比较奇葩吧。