GlobalAddAtom() 在 Win7 上返回 0 和 GetLastError = 0x5,适用于 XP

Posted

技术标签:

【中文标题】GlobalAddAtom() 在 Win7 上返回 0 和 GetLastError = 0x5,适用于 XP【英文标题】:GlobalAddAtom() returns 0 and GetLastError = 0x5 on Win7, works on 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 感谢您的最新评论,是的:控制台似乎合乎逻辑。 【参考方案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"),它仍然可以工作。 谢谢!这真的很有帮助!

以上是关于GlobalAddAtom() 在 Win7 上返回 0 和 GetLastError = 0x5,适用于 XP的主要内容,如果未能解决你的问题,请参考以下文章

SetWindowPos,RegisterHotKey,GlobalAddAtom的用法

对象的宽度top位置,x坐标属性

如何在win7安装版镜像集成usb3.0驱动

如何在win7虚拟机上安装软件

VS2010在win7下安装失败

在win7下访问FTP时无法上传文件