我有这两行代码。

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

我在应用程序的任何地方都没有设置该值。 (安装程序会执行此操作)。因此,无论在何处或何时运行此行,strHost都应该相同。

这就是我所拥有的。
按A->包含代码的运行功能->查看预期数据;
按B->执行一些Windows回调->包含代码的运行功能->参见“”;

我认为B中的某些内容可以清除该值,但是如果先按B再按A,A就会得到我不想要的“”。

可悲的是,我无法访问保存Windows回调的代码,或者它必须是我见过的最大堆管理不善的混淆。

我想知道的是,如果GetProfileString从不应该从某个地方提取数据?这是我唯一能想到的。

问题。
1.)有没有办法确认我仍在使用相同的“ key ”?
2.)有人遇到过吗?

如果您认为这是一个不好的问题,并希望将其标记为此类,请发表评论,以便我解决。

尽管我没有完全找到答案,但确实找到了一些有趣的东西。
我正在使用AfxGetApp()-> GetProfileString ..似乎函数AfxGetApp()在不同的时间返回不同的东西。.我不确定如何发生,但至少我现在可以解释一下。

最佳答案

除注册表外,GetProfileString()还可从.ini文件读取。如果对GetProfileString()的调用是在CWinApp派生的对象上进行的,而不是在主应用程序(例如在dll中)上进行的,则它可能会尝试从应用程序的.ini文件读取。尝试进入GetProfileString()找出正在发生的事情。

但是我的建议是:不要使用GetProfileString()。使用CRegKey直接查询注册表。这可能不是您想听到的,因为必须传递注册表项是很重要的。我通常要做的是在stdafx.h中#define一个全局APPLICATION_REG_KEY宏。它使纯粹主义者感到沮丧,但是非常方便。

08-18 15:19