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的主要内容,如果未能解决你的问题,请参考以下文章