解决在VC++6.0中遇到GetPrivateProfileIntA读值错误的问题

来源:互联网 发布:淘宝如何查看累计消费 编辑:程序博客网 时间:2024/06/14 13:02

最近在给一个VC++6.0中开发的MFC项目中添加一个串口通信的功能,而为了让串口在程序初始化的过程中就开始工作,必须在将串口写到初始化的函数中,这样遇到了一个矛盾,就是该串口的参数配置就固定不变了,这样对后期软件改进方面不利,故而需要用到配置文件对其进行配置。

在这里,因为仅需要配置串口号,我在这里使用的是GetPrivateProfileInt函数,实现代码如下:

int comPortNum = GetPrivateProfileIntA("ComPortInfo","Port",5,path);
这里简单说明一下Windows系统下配置文件(INI文件)的格式,如下所示:

[Section]       ;节Key = Value   ;键=键值
现在解释一下GetPrivateProfileIntA函数中的参数,参数1ComPortInfo是节名,参数2Port是键名,参数3是默认值(在读取配置文件值失败后,自动选择该值),参数4path是配置文件的绝对地址(一定填写绝对地址,很多人在这里会写相对地址,导致读取配置文件的值失败)。

我在项目中利用上述函数读取值的时候,总是读出的是默认值5,百事不得其解,查了很多资料,最后看到了函数名中有个A,可能是读取ANSI编码格式的文件,我猜测可能是编辑配置文件的编码问题,带着这个疑问,用NotPad++打开ini文件,发现其编码格式是UTF-8。尝试性的将文件改成了ANSI的格式,然后在VC++6.0中DEBUG一下,观察comPortNum中的值,已经和我在配置文件中配置的一样了,问题解决!

综上所述,GetPrivateProfileIntA函数,读取的配置文件,编码格式必须是ANSI格式!

顺带提一下用Windows自动的笔记本如何更改编码格式,两种思路:

1.新创建文件,并且未保存的情况下,在保存的时候,可以选择编码;

2.在已经有保存文件的情况下,可以在另存为的时候,选择编码。


以上。

原创粉丝点击