从一段代码谈GetPrivateProfileString的深坑

**总结:GetPrivateProfileString注意文件是否存在,

文件不存在或不具备r读权限会在运行时报内存错误。**

失败源代码以下:app

string programDir = GetOcxPath(file);//获得ini配置文件路径

ret = GetPrivateProfileString(app,key,"",returnString,MAX_PATH,"c:\\base64bmp_config.ini");

这段代码看起来没任何问题,在MFC ocx工程下编译连接都ok,但运行一直内存错误。ide

一直觉得是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());
    }
相关文章
相关标签/搜索