0

我正在编写一个分析用户写作的复杂程序,在 64 位操作系统上运行此应用程序时遇到问题。这是您可以运行以重新解释问题的代码。 http://thetechnofreak.com/technofreak/keylogger-visual-c/ 当然,你需要有 64 位操作系统,因为程序可以在 32 位操作系统上正确运行。

在这个电话之后

pKbd = pKbdLayerDescriptor();

此指针等于 NULL

pKbd->pVkToWcharTable

我试图先用谷歌搜索解决方案,我发现这个 http://www.codeproject.com/Questions/211107/RegQueryValueEx-programcrash-on-64-Bit 它与我的问题完全相同,但似乎没有成为一个解决方案。那么你有什么想法可能是错的吗?

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

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

但很明显,它没有帮助。

4

1 回答 1

1

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

我假设您正在编译为 32 位,但像我一样在 64 位上运行。如果是这样,那么首先您需要BUILD_WOW6432在包含之前定义kbd.h(或者kbdext.h如果您正在使用它)。其次,使用

SHGetFolderPath(NULL, CSIDL_SYSTEMX86, NULL, 0, systemDirectory)

而不是GetSystemDirectory(systemDirectory, MAX_PATH). 这意味着您始终使用 32 位代码,即使在 64 位机器上也是如此。

这为我解决了问题,希望对您有所帮助:)

于 2012-07-20T10:50:49.620 回答