vs2005 获取应用程序绝对路径 小写盘符解决方法
vs2005获取应用程序绝对路径小写盘符我用GetModuleFileName函数获取应用程序的绝对路径,应该是大写的盘符
vs2005 获取应用程序绝对路径 小写盘符
我用GetModuleFileName函数获取应用程序的绝对路径,应该是大写的盘符比如D盘,在vs2005下怎么是小写d呢?
代码如下,这里的g_chWorkPath值为是小写的"d",应该为大写的
也就是说数组g_chWorkPath的第一个值为
C/C++ codevoid GetWorkPath(){ GetModuleFileName(NULL, g_chWorkPath, IDP_APP_MAX_LEN); TCHAR ch = '\\'; TCHAR* pdest = _tcsrchr( g_chWorkPath, ch); if (pdest != NULL) { *(pdest+1) = 0; } }
PS:在vc6,0下获取的就是大写D
[解决办法]那就替换了
if(找到d:)
d:替换为D:;
程序由你来控制
[解决办法][解决办法]docmgr.cpp921代码是
C/C++ codeif( AfxFullPath(szPath, szTemp) == FALSE )//而vc6则没有进行校验 { ASSERT(FALSE);//这里断言 return NULL; // We won't open the file. MFC requires paths with // length < _MAX_PATH }
[解决办法]
那就有可能不是大小写的问题!
[解决办法]
看你3楼的错误
显然你获取到的路径是有问题啊
用一个AfxMessageBox看看你到底获取到了什么
然后看看应该怎样修改
这个和大小写肯定是没有关系的
[解决办法]
[解决办法]
从这段看不出啥问题, VC6下很多条件都不检测,越高的版本检测越严格
在 docmgr.cpp CDocument* CDocManager::OpenDocumentFile(LPCTSTR lpszFileName)函数中设置个断点 一步步调试下看看
估计还是文件名非法,
[解决办法]
从另一个角度说几句,希望能帮到楼主
1)为什么你要将项目安装的那么深:×××项目××××/最终××××××××/×.....
能不能在根目录下,尽量不用中西文混合命名。vc6的项目名也是这样?
2)之所以进不了调试界面,感觉你在操作系统的默认调试工具不是VS2005,这和你安装和设置这两种编程调试工具有关。
[解决办法]
[解决办法]
楼主心态太急了,需要重新整理一下思路,
直接生成(不调试)执行程序都有错误,说明程序是有问题的,就先别管921代码了。(当然你也可工程改为release版尝试一下)
你那种方式不正确,是进不了源代码区的。就是说,你运行了执行程序(不调试)。系统带你进入汇编调试很正常。
在vs2005中运行调试---一定要进行调试,看有什么错误报告,再仔细分析。
[解决办法]
真郁闷,楼主连调试都不会?
#include <Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
void GetWorkPath()
{
ASSERT((sizeof(g_chWorkPath) / sizeof(g_chWorkPath[0])) >= MAX_PATH);
g_chWorkPath[0] = '\0';
if (GetModuleFileName(NULL, g_chWorkPath, IDP_APP_MAX_LEN))
{
PathRemoveFileSpec(g_chWorkPath);
PathAddBackslash(g_chWorkPath);
}
/* 不要这么写!有经验跟没有经验的分别就体现在这里。
TCHAR ch = '\\';
TCHAR* pdest = _tcsrchr( g_chWorkPath, ch);
if (pdest != NULL)
{
*(pdest+1) = 0;
}
*/
}
[解决办法]
我现在完全糊涂了
你到底是不是要调试
调试状态下到底有没有问题
直接点吧
用F5运行会不会出问题
如果这样不会就在你怀疑有问题的位置加AfxMessageBox
然后ctrl+F5运行再看看
[解决办法]
[解决办法]
不是让你在那个文件中加断点
如果断下来可以看调用堆栈
然后找到自己的代码
而且
如果你加了AfxMessageBox
再去运行一样可以通过弹出信息判断错误位置啊
不知道你到底是怎么操作
到底是什么情况
[解决办法]
这个文件docmgr.cpp是不是在MFC的源码目录内?在VC中打开它,找到目的行,按F9键设置断点然后按F5键调试。