关于GetPrivateProfileInt的问题

还有名字 2011-12-07 11:53:31
如下代码

#include <windows.h>
#include <iostream>
#define aMethod 0x0001
#define bMethod 0x0002
#define cMethod 0x0003
int main()
{
int Result = GetPrivateProfileInt("set", "method", 0, "F://set_method.cfg" );
cout<<Result<<endl;
}


set_method.cfg中数据如下:
[set]

method = aMethod | bMethod |cMethod

可是Result输出的结果是0,不是我想要的Result = aMethod | bMethod | cMethod的结果,该怎么解决?
很急,请求高手解答
...全文
1220 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oircle 2012-05-29
  • 打赏
  • 举报
回复
GetPrivateProfileInt 的返回值是int 而枚举变量取int值的也就是取出来的0
还有名字 2011-12-07
  • 打赏
  • 举报
回复
请教啊!自己顶起!
快快来大神来解答啊!
还有名字 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 c_losed 的回复:]
[set]
method = 2
[/Quote]
关键是现在不知道方法共有几种,也不晓得要使用几种,所以才使用配置文件传参数的,
也就是说配置文件就要写成如上格式该怎么办?
c_losed 2011-12-07
  • 打赏
  • 举报
回复
[set]
method = 2
HunkTeng 2011-12-07
  • 打赏
  • 举报
回复
读取的时候只读INT值,但如果给的不是INT就读不出来了。

这个函数读的时候,跟程序中是否定义了宏没有关系的。

还有名字 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 shw111517 的回复:]
你的意思是你只是有一个Exe文件和一个资源文件,资源文件中只有一些宏的名称而不知道宏的值是么?
[/Quote]

正解!就是只是知道aMethod对应的是程序a功能,bMethod对应b功能,以此类推,想实现哪种功能就是配置文件中将method的值赋为什么就可以了,想同时实现ab功能就用a|b

多谢你耐心解答啊
shw111517 2011-12-07
  • 打赏
  • 举报
回复
你的意思是你只是有一个Exe文件和一个资源文件,资源文件中只有一些宏的名称而不知道宏的值是么?
还有名字 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 shw111517 的回复:]
我目前只想到一个笨方法
你可以通过GetPrivateProfileString()获取字符串然后通过循环解析这个字符串啊,因为你可以用字符串中的'|'作为分隔符,读出每个Method,并查找相应的Method对应的值并计算其结果。

另外你如果是测试的话你只需要算出aMethod | bMethod |cMethod的结果存放在文件中就行了啊,这个又不难
[/Quote]
我感觉还是先用GetPrivateProfileString得到字符串后解析出每个Method以后也只能存储在字符数组或者string字符串中呀,那怎么能得到他们对应的数字呢?!你说的第二种方法,也就是想使用哪个方法就在配置文件中算出结果后更改,可是如果你不知道到源码?也就是现在只有一个编译好的exe文件和一些必要的资源文件,这种情况下也不知道哪个方法对应哪个数呀?那你想调用其他方法怎么办呢?
shw111517 2011-12-07
  • 打赏
  • 举报
回复
如果你觉得计算aMethod|bMethod|cMethod麻烦的话也可以直接写二进制格式啊,比如
#define aMethod 0x0001
#define bMethod 0x0002
#define cMethod 0x0004
那么aMethod|bMethod|cMethod二进制写法就是method=0x0007
shw111517 2011-12-07
  • 打赏
  • 举报
回复
我目前只想到一个笨方法
你可以通过GetPrivateProfileString()获取字符串然后通过循环解析这个字符串啊,因为你可以用字符串中的'|'作为分隔符,读出每个Method,并查找相应的Method对应的值并计算其结果。

另外你如果是测试的话你只需要算出aMethod | bMethod |cMethod的结果存放在文件中就行了啊,这个又不难
还有名字 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shw111517 的回复:]
GetPrivateProfileInt()方法是获取整数,而楼主定义method = aMethod | bMethod |cMethod
明显是字符串么,要什么你就使用GetPrivateProfileString()方法
1.使用GetPrivateProfileInt()方法:
需要先定义一个Int变量 赋值为aMethod | bMethod |cMethod,然后保存Int变量的……
[/Quote]

你说都对,我define确实写的有问题,可你没有理解我的意思,如果我可以在程序里直接定义Result = aMethod | bMethod | cMethod的话,那再去读取配置文件就没有意义了!现在这个程序有多种方法可以引用,不光有abc三种,还有许多,现在我想测试一下这些功能是否发挥作用,想通过配置文件给Result传递参数,也就是修改配置文件就可以实现各个功能了,关键是配置文件中貌似只能写method = 多少,而不能有额外的其他符号,包括"|",这该怎么解决呢?
shw111517 2011-12-07
  • 打赏
  • 举报
回复
GetPrivateProfileInt()方法是获取整数,而楼主定义method = aMethod | bMethod |cMethod
明显是字符串么,要什么你就使用GetPrivateProfileString()方法
1.使用GetPrivateProfileInt()方法:
需要先定义一个Int变量 赋值为aMethod | bMethod |cMethod,然后保存Int变量的值到文件中再读取出来。
2.使用GetPrivateProfileString()方法:
需要先定义一个CString变脸,赋值为"aMethod | bMethod |cMethod",然后保存CString变量的值到文件中再读取出来。

另外你定义的
#define aMethod 0x0001
#define bMethod 0x0002
#define cMethod 0x0003
是否有问题啊
是否应该定义为
#define aMethod 0x0001
#define bMethod 0x0002
#define cMethod 0x0004
因为0x0001的二进制是00000001、0x0002的二进制是00000010、0x0003的二进制是00000011,你用这3个与运算肯定会有重复啊
而用0x0001的二进制是00000001、0x0002的二进制是00000010、0x0043的二进制是00000100才会无重复的表达2^3=8种情况啊

还有名字 2011-12-07
  • 打赏
  • 举报
回复
upupupupup,
我问的问题咋都没人回答啊?伤心~~

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧