Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   ошибка при создание класса (http://forum.oszone.net/showthread.php?t=310738)

амир-05 25-01-2016 07:41 2598775

ошибка при создание класса
 
Вложений: 1
написал класс:
Скрытый текст
Код:

#include<windows.h>
class Hook{
public:
void SetHook(){
    HINSTANCE hinstDLL = GetModuleHandle(NULL);
    if (!(_hook = SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)KeyProc, hinstDLL,0))){
    MessageBox(NULL, "Failed to install hook!", "Error", MB_ICONERROR);                                                            }       
}
void UnSetHook(){
    UnhookWindowsHookEx(_hook);
}
int GetVKCode(){
    return code;
}
bool GetKey(){
    return key;
}
void SetKey(bool keym){
    key=keym;
}
void Update(){
    PeekMessage(&msg,NULL,0,0,0);
}
    void uncode(){
    code=0;
}
private:
HHOOK _hook;
HINSTANCE hinstDLL;
static int code;
static bool key;
MSG msg;
static LRESULT CALLBACK KeyProc(int ncode,WPARAM wParam,LPARAM lParam){
KBDLLHOOKSTRUCT * pStruct = (KBDLLHOOKSTRUCT *)lParam;
code=pStruct->vkCode;
if(wParam==WM_KEYUP){key=false;code=0;}else{key=true;}
return CallNextHookEx(_hook,ncode,wParam,lParam);
}
};


компилятор выдает ошибку:
Скрытый текст

Помогите пожалуйста!

User001 27-01-2016 11:34 2599568

Вы в статическом методе
Цитата:

Цитата амир-05
static LRESULT CALLBACK KeyProc(int ncode,WPARAM wParam,LPARAM lParam) »

используете поле _hook, которое нестатическое.

Если у вашего класса вызвать Hook::KeyProc(...), то отуда компилятор должен взять _hook?

амир-05 10-02-2016 18:02 2604634

спс

но я уже перешёл на глобальные хуки и написал следующий код:
main.cpp:
Код:

#include<windows.h>
#include<iostream>
using namespace std;
int main(){
        HOOKPROC func;
        HHOOK _hook;
        int ncode=15;
        WPARAM wParam;
        LPARAM lParam;
        MSG msg;
        HINSTANCE hinstDLL;
        hinstDLL=LoadLibrary("dll.dll");
        (FARPROC &)func = GetProcAddress(hinstDLL,"KeyProc@12");
        _hook=SetWindowsHookEx(WH_KEYBOARD,func,hinstDLL,0);
        while(1){
                PeekMessage(&msg,NULL,0,0,0);
        }
}

dll.cpp:
Код:

#include<windows.h>
#include<iostream>
#define DllExport extern"C" __declspec(dllexport)
HHOOK _hook;
DllExport LRESULT CALLBACK KeyProc(int ncode,WPARAM wParam,LPARAM lParam){
        std::cout<<wParam;
        std::cout<<123;
        }

но не работает:может я что то не дописал или упустил,не пойму.Помогите пожалуйста))


Время: 06:34.

Время: 06:34.
© OSzone.net 2001-