2008-12-19 48 views
1

我有这两行代码。MFC SetRegistryKey ...是否有GetRegistryKey函数?

CString strHost = AfxGetApp()->GetProfileString(_T("WebServices"), _T("Server")); 
AfxMessageBox(strHost); 

没有在应用程序中设置值。 (安装程序这样做)。所以strHost应该是一样的,无论这条线在哪里或什么时候运行。

这是我得到的。按A - >运行包含代码的函数 - >查看预期数据;按B键 - >做一些windows回调 - >运行包含代码的函数 - >参见“”;

我认为B中的某些东西正在清除这个值,但是如果我先按B然后A,那么A就会产生我不想要的“”。

不幸的是,我没有访问存储窗口回调的代码,或者说它必须成为我见过的最大的管理混乱的最大堆。

我很好奇的是,如果GetProfileString从某处拉取数据,它不应该是?这是我能想到的唯一的事情。

问题。
1.)有没有办法确认我还在使用相同的“密钥”?
2.)有没有人曾经遇到过这个?

如果您认为这是一个糟糕的问题,并且希望将其标记为这样,请留下评论,以便我可以修复它。


虽然我没有找到答案完全我做了跟踪下有趣的东西。
我正在使用AfxGetApp() - > GetProfileString ..
似乎函数AfxGetApp()在不同的时间返回不同的东西..我不知道如何发生,但至少我现在可以解释它。

回答

1

GetProfileString()还可以从注册表以外的.ini文件读取。如果对GetProfileString()的调用是在不同于主应用程序中的CWinApp派生对象(例如在dll中)的CWinApp派生对象上完成的,则它可能会尝试从应用程序的.ini文件读取。尝试进入GetProfileString()以了解发生了什么。

但是,我的建议是:不要使用GetProfileString()。使用CRegKey直接查询注册表。这可能不是您想要听到的,因为这是必须通过注册表键的主要原因。我通常做的是#在stdafx.h中定义一个全局的APPLICATION_REG_KEY宏。它扰乱了纯粹主义者,但它非常方便。

+0

这就是我想我可能不得不做的。问题是应用程序是一团糟。 (我从一个被解雇的人那里继承了它),get和set profile字符串被用在整个血腥的地方。我想在任何地方替换它,这将意味着完整的回归测试.. Yuck ..但是,谢谢。 – baash05 2008-12-19 15:13:10

+0

很遗憾,我无法进入代码。这是一个PPC应用程序,并且问题只发生在一种单位类型上,当用户刷信用卡时。我认为你是对的。问题是,我该如何解决它。 – baash05 2008-12-19 15:31:14

0

我找到了答案..排序。 AfxGetApp函数根据调用的位置返回不同的对象。例如,如果在dll中调用它,它会返回一个指向它的指针。我认为它甚至会在应用程序使用OS调用时返回错误的内容。这意味着GetProfileString用于不同的“配置文件”。

我没有找到遇到此问题的人,但我认为问题已解决。随意添加更多“答案”,如果你不..