【问题标题】:GlobalAddAtom() returns 0 and GetLastError = 0x5 on Win7, works on XPGlobalAddAtom() 在 Win7 上返回 0 和 GetLastError = 0x5,适用于 XP
【发布时间】:2011-04-04 08:58:21
【问题描述】:

简单代码:

ATOM atom = GlobalAddAtom(L"TestCpp1"); 

它返回 0,GetLastError 返回 0x5(拒绝访问)。 MSDN上没有关于它的内容。 这是在Win7上。管理员权限没有区别。

同样的代码适用于 XP。 AddAtom(本地)适用于 Win7。

这是什么原因造成的?

【问题讨论】:

  • 您以管理员身份运行它,对吗?也许它需要一个清单(可能将 uiAccess 设置为 true);这只是一个疯狂的猜测。
  • 我无法让 uiAccess=true 工作,因为我不知道如何签署应用程序,但以管理员身份运行它并没有任何区别...
  • 您能否添加一个简短的声明来回答这个细节:这是一个 GUI 或控制台应用程序吗?(也许是一个简短的编辑说明,使这个问答对其他人更有帮助)谢谢提前:-)
  • @Wolf 我很乐意效劳,但这是 5 年前的事了,我几乎记不得了……我认为这是控制台应用程序,但不要引用我的话 :)
  • @georgiosd 感谢您的最新评论,是的:控制台似乎合乎逻辑。

标签: c++ c windows winapi windows-7


【解决方案1】:

这是一个 GUI 还是控制台应用程序?您可能会尝试的一件事是在调用 GlobalAddAtom 之前显式调用 LoadLibrary("User32")。

这是对遇到类似问题的人的参考,在 XP 上这可能是相关的吗? http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.kernel/2004-03/0851.html

【讨论】:

  • 没有什么好办法......我确实看到了这条消息,但我不明白这个人在说什么 - 感谢您为我解码,它的工作原理是这样的。
  • 哇。这是否可以证明 User32 函数有一个 if 语句,如果未加载库,则加载该库,并且 GlobalAddAtom 和 GlobalFindAtom 不执行此检查?因为你可以用MessageBoxA(NULL, "_", "_", 0) 替换LoadLibraray("User32"),它仍然可以工作。
  • 谢谢!这真的很有帮助!
猜你喜欢
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
相关资源
最近更新 更多