我在MyClass中有這個靜態回調函數,並且我嘗試從它調用另一個靜態函數。但是,有一個問題,Register()採用的參數之一是非靜態類變量。靜態函數中的非靜態參數
我想過使用「this」關鍵字來克服這個問題,但似乎我無法('this':只能在非靜態成員函數內引用)。這裏是我的代碼:
class MyClass
{
...
static LRESULT CALLBACK klHkProc(int nCode, WPARAM wParam, LPARAM lParam);
static BOOL Register(DWORD vKey,KEYBLOCK* ptrKEYBLOCK);
KEYBLOCK *kb;
...
}
LRESULT CALLBACK MyClass::klHkProc(int nCode, WPARAM wParam, LPARAM lParam)
{
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) (lParam);
if (wParam == WM_KEYDOWN)
{
MyClass::Register(p->vkCode,this->kb);
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
有什麼建議嗎?
靜態函數無法訪問實例成員。你想從哪裏得到實例? – 2012-04-05 16:10:21
您是否有地方將額外的數據傳遞到註冊回調的地方?如果是這樣,你可以在裏面傳遞'this'。 – Nate 2012-04-05 16:12:11