从一段代码谈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的深坑的主要内容,如果未能解决你的问题,请参考以下文章

从一段代码看java对象初始化中属性的初始化

从一段视频中按帧提取图片

从一次小哥哥与小姐姐的转账开始, 浅谈分布式事务从理论到实践

unity 物体颜色从一段到另一端逐渐变色,这个效果怎么做的?

从一段文字中提取出uri信息

谈一谈最近学了一段时间的node.js