从一段代码谈GetPrivateProfileString的深坑
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从一段代码谈GetPrivateProfileString的深坑相关的知识,希望对你有一定的参考价值。
**总结:GetPrivateProfileString注意文件是否存在,文件不存在或不具有r读权限会在运行时报内存错误。**
失败源代码如下:
string programDir = GetOcxPath(file);//得到ini配置文件路径
ret = GetPrivateProfileString(app,key,"",returnString,MAX_PATH,"c:\\base64bmp_config.ini");
这段代码看起来没任何问题,在MFC ocx工程下编译链接都ok,但运行一直内存错误。
一直以为是ocx注册没有替换,或者是GetOcxPath存在内存错误,将GetOcxPath单元测试和断点调试没有任何问题。
最后增加了文件存在判断,不存在就读取默认文件就OK了。
改进后源代码如下:
string programDir = GetOcxPath(file);//得到ini配置文件路径
DWORD ret;
FILE* fp = fopen(programDir.data(),"r");
if(!fp){
ret = GetPrivateProfileString(app,key,"",returnString,MAX_PATH,"c:\\base64bmp_config.ini");
}else{
ret = GetPrivateProfileString(app,key,"",returnString,MAX_PATH,programDir.data());
}
以上是关于从一段代码谈GetPrivateProfileString的深坑的主要内容,如果未能解决你的问题,请参考以下文章
从一次小哥哥与小姐姐的转账开始, 浅谈分布式事务从理论到实践