Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa pristupom funkcije klase...

[es] :: C/C++ programiranje :: Problem sa pristupom funkcije klase...

[ Pregleda: 1657 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
195.252.80.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Problem sa pristupom funkcije klase...24.02.2005. u 16:15 - pre 233 meseci
//Ovaj tekst je subjektivno napisan, pa me ne napadajte ako nisam u pravu (imam jako malo iskustva sa OOP)
Klase - mač sa dve oštrice. Pored svih prednosti organizovanja koda i svega ostalog, onaj koje navikao na line-after-line programiranje u BASICU, pascalu ili C-u ima velike poteškoće da nauči kako se koriste klase...

Bacio sam dosta $ za VC++ 6 da bih odradio jedan komer. projekat, a posle par dana naiđoh na problem.

Pošto sam napisao dosta koda, problem je nastao u preglednosti koda. Rekoh sebi: ajde da se malo pozabavim sa klasama... Tu počinje pakao...

Maksimalno sam pojednostavio projekat, tj. izdvojio sam jedan deo da bi mogli da mi pomognete.

hook.h:
Code:
class hook{
public:
    LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
};


hook.cpp:
Code:
#define _WIN32_WINNT 0x0400
#include "Windows.h"
#include "hooking.h"


        LRESULT CALLBACK LowLevelKeyboardProc(int nCode, 
           WPARAM wParam, LPARAM lParam) {

           BOOL fEatKeystroke = FALSE;

           if (nCode == HC_ACTION) {
              switch (wParam) {
              case WM_KEYDOWN:  case WM_SYSKEYDOWN:
              case WM_KEYUP:    case WM_SYSKEYUP: 
                 PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;
                 fEatKeystroke = 
                    ((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||
                    ((p->vkCode == VK_ESCAPE) && 
                    ((p->flags & LLKHF_ALTDOWN) != 0)) ||
                    ((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 
                     0x8000) != 0));
                 break;
              }
           }
           if(fEatKeystroke) 
                MessageBox(NULL,NULL,NULL,NULL);        
        return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, 
                  lParam));
        }

};


main.cpp:

Code:
#define _WIN32_WINNT 0x0400
#include <Windows.h>
#include "hooking.h"
void OnTop();

int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {


    HHOOK hhkLowLevelKybd  = SetWindowsHookEx(WH_KEYBOARD_LL, hook::LowLevelKeyboardProc, hinstExe, 0);


   MessageBox(NULL, 
      TEXT("System combination of keys is disabled.\n")
      TEXT("Click OK to terminate this application and enable combinations"),
      TEXT("Try to press ALT-TAB, CTRL-ESC or ALT-ESC!"), MB_OK);
   UnhookWindowsHookEx(hhkLowLevelKybd);

   return(0);
}

void OnTop()
{
      MessageBox(NULL, 
      TEXT("You have pressed forbiden combination!\n")
      TEXT("Click OK to close this message box"),
      TEXT("Forbiden!"), MB_OK);
}



Poruka o grešci:
Code:
--------------------Configuration: hook - Win32 Debug--------------------
Compiling...
main.cpp
c:\frogProject\ES\main.cpp(9) : error C2664: 'SetWindowsHookExA' : cannot convert
 parameter 2 from 'long (__stdcall hook::*)(int,unsigned int,long)' to 
'long (__stdcall *)(int,unsigned int,long)'
        There is no context in which this conversion is possible
Skipping... (no relevant changes detected)
hooking.cpp
Error executing cl.exe.

hook.exe - 1 error(s), 0 warning(s)
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.in-addr.btopenworld.com.



+4 Profil

icon Re: Problem sa pristupom funkcije klase...24.02.2005. u 17:09 - pre 233 meseci
I da kreira instancu "hook" klase, opet ne bi nishta postigao, shto mu i greshka kazhe.
Ili proglasi callback funkciju za "static", ili je potpuno izbaci iz klase i napravi obichnu funkciju.
U sluchaju da je proglasish za "static" u okviru klase, ne morash da kreirash instancu "hook" klase.


EDIT:

U sluchaju da je ova poruka i dalje iznad poruke filmil-a, neshto debelo ne valja oko nachina rachunanja vremena na forumu :)
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: Problem sa pristupom funkcije klase...24.02.2005. u 17:24 - pre 233 meseci
NastyBoy me je pretekao sa odgovorom, ali da iskoristim priliku da apelujem na našeg prijatelja Filipa da batali ES-News da nam ne pravi haos na temama.

Uzgred, Burgose, ako ne osećaš potrebu za OO-programiranjem, jednostavno se drži proceduralnog, niko neće da te ubije zbog toga.
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
*.smin.sezampro.yu.

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Problem sa pristupom funkcije klase...24.02.2005. u 17:33 - pre 233 meseci
Hvala vam svima mnogo....
PS Gojko bi trebao da vidi šta je sa vremenom na newsu.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.decis.nl.

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Problem sa pristupom funkcije klase...24.02.2005. u 17:34 - pre 233 meseci
Citat:
Klase - mač sa dve oštrice. Pored svih prednosti organizovanja koda i svega ostalog, onaj koje navikao na line-after-line programiranje u BASICU, pascalu ili C-u ima velike poteškoće da nauči kako se koriste klase...
To se lako rešava. Ako imaš takvog nekog u projektnom timu, bacite ga sa zgrade. ;)
Citat:

hook.h:
Code:

Code:
class hook{
 public:
 LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
 };
Ovde je problem. Nemaš nijednu instancu klase hook. Samo si definisao da postoji neki tip koji ima metod taj-i-taj, ali nisi napravio nijednu instancu. Zato ti prevodilac kaže da je tip funkcije ... (hook::*)(...) a ne samo (*)(...).

Isto kao da si uradio:

Code:
typedef struct {
     int i;
 } my_struct;
 
 
a zatim hoćeš da uradiš:

Code:
my_struct.i = 1;
 

dok je ispravno:

Code:
my_struct a;
 a.i = 1;
 

(tj. moraš da deklarišeš neku promenljivu koja će da bude tog tipa pa da na njoj operišeš).

Jel sada jasnije?

f
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.ipact.nl.

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Problem sa pristupom funkcije klase...24.02.2005. u 19:45 - pre 233 meseci
Citat:
NastyBoy me je pretekao sa odgovorom,
Bila je samo ilustracija šta se pokušava. Food for thought.
Citat:
ali da iskoristim priliku da apelujem na našeg prijatelja Filipa da batali ES-News da nam ne pravi haos na temama.
Bolje apeluj na upravu da ne zaboravlja da šteluje sat na računaru s bazom, ili da iskoristi NTP.

f
 
Odgovor na temu

[es] :: C/C++ programiranje :: Problem sa pristupom funkcije klase...

[ Pregleda: 1657 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.