Winapi KbdLayerDescriptor在64位体系结构处返回NULL

Winapi KbdLayerDescriptor在64位体系结构处返回NULL,winapi,keyboard,Winapi,Keyboard,我正在写一个复杂的程序来分析用户的写作,我在64位操作系统上运行这个应用程序时遇到了问题。 下面是您可以运行以重新解释问题的代码。 但当然,您需要64位操作系统,因为程序可以在32位操作系统上正确运行 在这通电话之后 pKbd = pKbdLayerDescriptor(); 此指针等于NULL pKbd->pVkToWcharTable 我曾尝试先用谷歌搜索解决方案,我发现了这个 这和我的问题完全一样,但似乎没有解决办法。 那么,你有什么想法会出错吗 程序中有这段代码,它似乎处理了3

我正在写一个复杂的程序来分析用户的写作,我在64位操作系统上运行这个应用程序时遇到了问题。 下面是您可以运行以重新解释问题的代码。 但当然,您需要64位操作系统,因为程序可以在32位操作系统上正确运行

在这通电话之后

pKbd = pKbdLayerDescriptor();
此指针等于NULL

pKbd->pVkToWcharTable
我曾尝试先用谷歌搜索解决方案,我发现了这个 这和我的问题完全一样,但似乎没有解决办法。 那么,你有什么想法会出错吗

程序中有这段代码,它似乎处理了32位和64位体系结构上指针之间的大小差异

#if defined(BUILD_WOW6432)
#define KBD_LONG_POINTER __ptr64
#else
#define KBD_LONG_POINTER
#endif

但是很明显,这没有帮助。

我刚刚遇到了与这段代码完全相同的问题

我假设您正在编译为32位,但与我一样在64位上运行。如果是这样,那么首先需要定义
BUILD\u WOW6432
,然后再包括
kbd.h
(或者
kbdext.h
,如果您正在使用它)。第二,使用

SHGetFolderPath(NULL, CSIDL_SYSTEMX86, NULL, 0, systemDirectory)
而不是
GetSystemDirectory(systemDirectory,MAX\u PATH)
。这意味着您总是使用32位代码,即使在64位机器上也是如此


这为我解决了问题,希望它能帮助您:)

您是否真的在VK_TO_WCHAR_表声明中使用KBD_LONG_指针?必选。我使用了我发布的第一个链接中使用的声明-kbdext.ht重点是将pVkToWchars成员的类型更改为64位指针。抱歉,我不明白这对我有什么帮助:(