1

我有这两行代码。

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

我没有在应用程序的任何地方设置值。(安装程序会这样做)。因此,无论何时何地运行此行,strHost 都应该是相同的。

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

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

遗憾的是,我无法访问保存 Windows 回调的代码,或者更确切地说,它必须是我见过的最大的一堆管理不善的混淆。

我很好奇的是,如果 GetProfileString 正在从不应该的地方提取数据?这是我唯一能想到的。

问题。
1.) 有没有办法确认我仍在使用相同的“密钥”?
2.) 有没有人遇到过这种情况?

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


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

4

2 回答 2

1

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

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

于 2008-12-19T14:54:35.337 回答
0

我找到了答案.. 有点。AfxGetApp 函数根据调用位置返回不同的对象。例如,如果在 dll 中调用它,它会返回指向该对象的指针。我认为当应用程序使用操作系统调用时它甚至会返回错误的东西。这意味着 GetProfileString 用于不同的“配置文件”。

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

于 2008-12-28T01:23:19.180 回答