Я создаю крючок клавиатуры, при этом KeyboardProc является статическим членом класса CWidget.
class CWidget
{
static LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam );
};
Я хочу вызвать нестатические члены CWidget внутри CWidget :: KeyboardProc.
Как лучше всего это сделать?
KeyboardProc не имеет 32-битного DWORD, куда я могу передать указатель this.





Учитывая, что вы, вероятно, хотите, чтобы одновременно устанавливался только один крючок клавиатуры, просто добавьте статический член pThis в свой класс:
// Widget.h
class CWidget
{
static HHOOK m_hHook;
static CWidget *m_pThis;
public:
/* NOT static */
bool SetKeyboardHook()
{
m_pThis = this;
m_hHook = ::SetWindowsHookEx(WH_KEYBOARD, StaticKeyboardProc, /* etc */);
}
// Trampoline
static LRESULT CALLBACK StaticKeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
ASSERT(m_pThis != NULL);
m_pThis->KeyboardProc(code, wParam, lParam);
}
LRESULT KeyboardProc(int code, WPARAM wParam, LPARAM lParam);
/* etc. */
};
Вам нужно определить статический член:
// Widget.cpp
CWidget *CWidget::m_pThis = NULL;
Вот что делает бит m_pThis->KeyboardProc - попадает в нестатический контекст. Это означает, что статическим должен быть только статический KeyboardProc.
у меня это не сработало: unresolved external symbols: "private: static class keylogger* keylogger::this_". В строке, где установлен m_pThis = this.
Вам все еще нужно где-то статический член определять.
теперь мне нужно установить все члены моего класса в статический, чтобы использовать их в методе. ты хоть представляешь, чтобы этого не случилось?