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