Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
21 / 21 / 3
Регистрация: 29.04.2012
Сообщений: 214

Диспетчер задач через dll

30.04.2012, 23:23. Показов 1979. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
# include<conio.h>
 
 
void GetServiceList(char *guf,FILE*&tp);
//void un();
void GetProcessList(char*buf, FILE*&fp);
char* unicode_to_ansi(wchar_t *unicode_string);
 
int main()
{
    //un();
        FILE *fp;
        char *buf;
        buf = (char*)malloc(sizeof(char));
        if (!buf) 
        {
              printf("Failure in allocation ANSI string(2)\n");
              exit(1);
        }
         if(!(fp=fopen("out.txt","w+")))
          {
               printf("Failure in generation file(1)!\n");
                exit(1);
         }
 
        //FILE *tp;
        char *guf;
        guf = (char*)malloc(sizeof(char));
        if (!guf) 
        {
          printf("Failure in allocation ANSI string(2)\n");
          exit(1);
        }
        /*if(!(tp=fopen("out1.txt","w+")))
         {
            printf("Failure in generation file(2)!\n");
            exit(1);
         }*/
        GetProcessList(buf,fp); 
        GetServiceList(guf,fp);
        free(guf);
        //fclose(tp);
        //remove("out1.txt");       
        fclose(fp);
        remove("out.txt");
        free(buf);
}
 
void GetServiceList(char *guf,FILE*&tp)
{
    int count=0,i=0;
    char x;
    SC_HANDLE hSCManager=OpenSCManager(NULL, NULL,SC_MANAGER_ENUMERATE_SERVICE);
 
    if (hSCManager == NULL) 
    {
        printf("OpenSCManager failed (%d)\n", GetLastError());
        return;
    }
 
    ENUM_SERVICE_STATUS_PROCESS *svc;
    DWORD dwBytesNeeded=0;
    DWORD dwServicesReturned = 0;
    BOOL bSuccess = EnumServicesStatusEx(hSCManager, 
                                SC_ENUM_PROCESS_INFO,
                                SERVICE_WIN32, 
                                SERVICE_ACTIVE, 
                                (LPBYTE)&svc,
                                0,
                                &dwBytesNeeded, 
                                &dwServicesReturned,
                                0, 
                                NULL);
        
    if (!bSuccess ||( GetLastError()==ERROR_MORE_DATA))
    {
        DWORD dwBytes = dwBytesNeeded;
        svc = (ENUM_SERVICE_STATUS_PROCESS*) new BYTE[dwBytes];
        EnumServicesStatusEx(hSCManager, 
                            SC_ENUM_PROCESS_INFO,
                            SERVICE_WIN32, 
                            SERVICE_ACTIVE, 
                            LPBYTE(svc),
                            dwBytes,
                            &dwBytesNeeded, 
                            &dwServicesReturned,
                            0, 
                            NULL);
    }
 
    
    for(unsigned i=0; i<dwServicesReturned; i++){
        guf = unicode_to_ansi(svc[i].lpDisplayName);
        fputs(guf, tp);
        fputs(" - ", tp);
        guf = unicode_to_ansi(svc[i].lpServiceName);
        fputs(guf, tp);
        fputs(" /", tp);
    }
 
    int len=ftell(tp);
     rewind(tp);
     guf=(char*)calloc(len,sizeof(char));
    if(!guf)
    {
        printf("Failure in allocation memory");
        exit(1);
    }
    
     i=0;
         while(i<len)
            {
                guf[i]=fgetc(tp);
                if(guf[i]=='/') guf[i]='\n';
                i++;
            }
         guf[i++]='\0';
        
        if (!guf)
        {
            printf("Failure in convertation from unicode!\n");
            exit(1);
        }
        rewind(tp);
        bSuccess = EnumServicesStatusEx(hSCManager, 
                                SC_ENUM_PROCESS_INFO,
                                SERVICE_WIN32, 
                                SERVICE_INACTIVE, 
                                (LPBYTE)&svc,
                                0,
                                &dwBytesNeeded, 
                                &dwServicesReturned,
                                0, 
                                NULL);
        
    if (!bSuccess ||( GetLastError()==ERROR_MORE_DATA))
    {
        DWORD dwBytes = dwBytesNeeded;
        svc = (ENUM_SERVICE_STATUS_PROCESS*) new BYTE[dwBytes];
        EnumServicesStatusEx(hSCManager, 
                            SC_ENUM_PROCESS_INFO,
                            SERVICE_WIN32, 
                            SERVICE_INACTIVE, 
                            LPBYTE(svc),
                            dwBytes,
                            &dwBytesNeeded, 
                            &dwServicesReturned,
                            0, 
                            NULL);
    }
    char *str;
    str=(char*)malloc(sizeof(char));
 
    for(unsigned i=0; i<dwServicesReturned; i++){
        str = unicode_to_ansi(svc[i].lpDisplayName);
        fputs(str, tp);
        fputs(" - ", tp);
        str = unicode_to_ansi(svc[i].lpServiceName);
        fputs(str, tp);
        fputs(" /", tp);
    }
 
    len=ftell(tp);
    rewind(tp);
     str=(char*)calloc(len,sizeof(char));
    if(!str)
    {
        printf("Failure in allocation memory");
        exit(1);
    }
    
     i=0;
         while(i<len)
            {
                str[i]=fgetc(tp);
                if(str[i]=='/') str[i]='\n';
                i++;
            }
         str[i++]='\0';
        
        if (!str)
        {
            printf("Failure in convertation from unicode!\n");
            exit(1);
        }
 
        i=0;
        setlocale(0,".1251");
        while(1)
        {
            system("cls");
            printf("Press \"q\" to exit\n");
            printf("Press \"f\" to show active services\n");
            printf("Press \"e\" to show inactive services\n");
            printf("Press \"t\" to show all services\n");
            x=getch();
            if (x=='f') count=1;
                else if (x=='e') count=2; 
                else if (x=='t') count=3;
                else if (x=='q') break;
            if (count==1) 
            {
                printf("\n\nNAME -  ACTIVE SERVICES\n\n");
                if(guf!='\0')
                printf("%s\n\n",guf);
    
                count=0;
            }
            else if(count==2)
            {
                printf("\n\nNAME -  INACTIVE SERVICES\n\n");
                if(str!='\0')
                printf("%s\n\n",str);
                
                count=0;
            }
            else if(count==3)
            {
                printf("\n\nNAME -  ALL SERVICES\n\n");
                printf("%s\n\n",str);
                printf("%s\n\n",guf);
                
                count=0;
            }
           system("pause");
        }
    
    CloseServiceHandle(hSCManager);
    
    }
 
 
 
    /*void un()
    {
        FILE *fp;
        char *buf;
        buf = (char*)malloc(sizeof(char));
        if (!buf) 
        {
              printf("Failure in allocation ANSI string(2)\n");
              exit(1);
        }
         if(!(fp=fopen("out.txt","w+")))
          {
               printf("Failure in generation file!\n");
                exit(1);
         }
        GetProcessList(buf,fp);
        free(buf);
    };*/
 
    void GetProcessList(char*buf, FILE*&fp)
    {
        HANDLE hProcessSnap;
         PROCESSENTRY32 pe32;
         int i=0,count=0;;
         char x;
 
         hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
 
         pe32.dwSize = sizeof( PROCESSENTRY32 );
 
         buf =(char*) realloc(buf, pe32.dwSize);
 
         if( !Process32First( hProcessSnap, &pe32 ))
         {
            CloseHandle( hProcessSnap );          
           return;
         }
         do{
             buf = unicode_to_ansi(pe32.szExeFile);
             fputs(buf, fp);
             fputs(" /", fp);
        } while( Process32Next( hProcessSnap, &pe32 ) );
 
         rewind(fp);
 
         while((buf[i]=fgetc(fp)) != EOF)
            { 
                if(buf[i]=='/') buf[i]='\n';
                i++;
            }
 
         int len=strlen(buf);
        
        if (!buf)
        {
            printf("Failure in convertation from unicode!\n");
            exit(1);
        }
 
        i=0;
 
        while(1)
        {
            system("cls");
            printf("Press \"q\" to changeover the services. There is no way back.\n");
            printf("Press \"s\" to show processes\n");
            x=getch();
            if (x=='s') count=20;
                else if (x=='q') break;
            if (count) 
            {
                printf("\n\nPROCESS\n\n");
                if(buf!='\0')
                printf("%s\n\n",buf);
                
                count=0;
            }
           system("pause");
        }
        
         CloseHandle( hProcessSnap );
    };
 
    char* unicode_to_ansi(wchar_t *unicode_string)
    {
        int sz;
    char *str;
    int str_len = WideCharToMultiByte(
        1251,               // Code page
        0,                  // Default replacement of illegal chars
        unicode_string,     // Multibyte characters string
        -1,                 // Number of unicode chars is not known
        NULL,               // No buffer yet, allocate it later
        0,                  // No buffer
        NULL,               // Use system default
        NULL                // We are not interested whether the default char was used
        );
    if (!str_len) 
    {
        printf("Failure in getting ANSI string length\n");
        exit(1);
    }
    str = (char*)calloc(str_len, sizeof(char));
    if (!str) 
    {
        printf("Failure in allocation ANSI string(1)\n");
        exit(1);
    }
    sz = WideCharToMultiByte(
        1251,               
        0,                  
        unicode_string,     
        -1,                 
        str,                
        str_len,            
        NULL,               
        NULL                
        );
    if (!sz)
    {
        printf("Convertation failure from unicode\n");
        free(str);
        exit(1);
    }
    return str;
    };

Пока что в cpp файле написал такую программу. Выдает список процессов, список служб ОС.
Собственно ошибку приложил в виде скринсейвера. Не понимаю в чем проблема.
Подскажите, пожалуйста.
Миниатюры
Диспетчер задач через dll  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.04.2012, 23:23
Ответы с готовыми решениями:

Диспетчер задач
Здравсвуйте, помогите пожалуйста исправить ошибку в коде,написанном на С++ и реализующем диспетчер задач, аналогичный диспетчеру задач...

Диспетчер задач
http://cs425917.vk.me/v425917401/34ad/MltH1vF9JRw.jpg

Диспетчер задач
Исходный код диспетчера задач, он предоставляет информацию о производительности компьютера и запущенных приложениях, процессах и...

4
21 / 21 / 3
Регистрация: 29.04.2012
Сообщений: 214
30.04.2012, 23:50  [ТС]
Создал dll. запихнул туда код, который выше.
C
1
2
3
4
5
6
7
8
9
10
namespace simple{
 
    class myclass{
 
    public:
    static  __declspec(dllexport) void GetProcessList(char*buf, FILE*&fp);
    static  __declspec(dllexport) char * unicode_to_ansi(wchar_t *unicode_string);
    static  __declspec(dllexport) void GetServiceList(char *guf,FILE*&tp);
    };
}
так выглядит заголовок.

создал приложение для dll, подключил заголовок, а в cpp файле в main() вставил все то, что в main в обычной программе:
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
#include "simpleH.h"
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
# include<conio.h>
 
using namespace simple;
 
 
int main()
{
        FILE *fp;
        char *buf;
        buf = (char*)malloc(sizeof(char));
        if (!buf) 
        {
              printf("Failure in allocation ANSI string(2)\n");
              exit(1);
        }
         if(!(fp=fopen("out.txt","w+")))
          {
               printf("Failure in generation file(1)!\n");
                exit(1);
         }
 
        myclass::GetProcessList(buf,fp);    
 
        char *guf;
        guf = (char*)malloc(sizeof(char));
        if (!guf) 
        {
          printf("Failure in allocation ANSI string(2)\n");
          exit(1);
        }
        rewind(fp);
 
        myclass::GetServiceList(guf,fp);
 
        free(guf);
        fclose(fp);
        remove("out.txt");
        free(buf);
}
Откуда столько ошибок? обычный cpp работал без проблем. а теперь....неужели в dll нельзя использовать FILE?

И еще вопрос чисто ради интереса: мой код читабелен или криво написан?
Миниатюры
Диспетчер задач через dll  
0
21 / 21 / 3
Регистрация: 29.04.2012
Сообщений: 214
01.05.2012, 02:21  [ТС]
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
#include "simpleH.h"
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
# include<conio.h>
 
using namespace simple;
 
 
int main()
{
        char *buf;
        buf = (char*)malloc(sizeof(char));
        if (!buf) 
        {
              printf("Failure in allocation ANSI string(2)\n");
              exit(1);
        }
 
        myclass::GetProcessList(buf);   
 
        char *guf;
        guf = (char*)malloc(sizeof(char));
        if (!guf) 
        {
          printf("Failure in allocation ANSI string(2)\n");
          exit(1);
        }
 
        myclass::GetServiceList(guf);
 
        free(guf);
        free(buf);
}
переделал так: убрал работу с файлами внутрь каждой функции. появилась другая ошибка, которую я вообще не знаю как исправить...

1)error LNK2019: unresolved external symbol "public: static void __cdecl simple::myclass::GetServiceList(char *)" (?GetServiceList@myclass@simple@@SAXPAD@ Z) referenced in function _main
2)error LNK2019: unresolved external symbol "public: static void __cdecl simple::myclass::GetProcessList(char *)" (?GetProcessList@myclass@simple@@SAXPAD@ Z) referenced in function _main
1> fatal error LNK1120: 2 unresolved externals

Кто-нибудь подскажите в чем ошибка.

Заголовок:
C
1
2
3
4
5
6
7
8
9
10
namespace simple{
 
    class myclass{
 
    public:
    static  __declspec(dllexport) void GetProcessList(char*buf);
    static  __declspec(dllexport) char * unicode_to_ansi(wchar_t *unicode_string);
    static  __declspec(dllexport) void GetServiceList(char *guf);
    };
}
Может я неправильно создал приложение? у меня версия express, поэтому приходится создавать обычный application, а потом в настройках все менять.
Вот мой порядок действий:
1. создание dll
а) new project - win32 console application - dll - empty project - finish.
б) создание заголовка (как в обычной программе)
в)создание cpp файла для написания собственно dll'ки. Если я код не скидывал, то вот он:
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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
# include<conio.h>
#include "simpleH.h"
 
namespace simple{
    
    void myclass::GetServiceList(char *guf)
{
    int count=0,i=0;
    char x;
    FILE *tp;
    if(!(tp=fopen("out.txt","w+")))
          {
               printf("Failure in generation file(1)!\n");
                exit(1);
         }
    SC_HANDLE hSCManager=OpenSCManager(NULL, NULL,SC_MANAGER_ENUMERATE_SERVICE);
 
    if (hSCManager == NULL) 
    {
        printf("OpenSCManager failed (%d)\n", GetLastError());
        return;
    }
 
    ENUM_SERVICE_STATUS_PROCESS *svc;
    DWORD dwBytesNeeded=0;
    DWORD dwServicesReturned = 0;
    BOOL bSuccess = EnumServicesStatusEx(hSCManager, 
                                SC_ENUM_PROCESS_INFO,
                                SERVICE_WIN32, 
                                SERVICE_ACTIVE, 
                                (LPBYTE)&svc,
                                0,
                                &dwBytesNeeded, 
                                &dwServicesReturned,
                                0, 
                                NULL);
        
    if (!bSuccess ||( GetLastError()==ERROR_MORE_DATA))
    {
        DWORD dwBytes = dwBytesNeeded;
        svc = (ENUM_SERVICE_STATUS_PROCESS*) new BYTE[dwBytes];
        EnumServicesStatusEx(hSCManager, 
                            SC_ENUM_PROCESS_INFO,
                            SERVICE_WIN32, 
                            SERVICE_ACTIVE, 
                            LPBYTE(svc),
                            dwBytes,
                            &dwBytesNeeded, 
                            &dwServicesReturned,
                            0, 
                            NULL);
    }
 
    
    for(unsigned i=0; i<dwServicesReturned; i++){
        guf = myclass::unicode_to_ansi(svc[i].lpDisplayName);
        fputs(guf, tp);
        fputs(" - ", tp);
        guf = myclass::unicode_to_ansi(svc[i].lpServiceName);
        fputs(guf, tp);
        fputs(" /", tp);
    }
 
    int len=ftell(tp);
     rewind(tp);
     guf=(char*)calloc(len,sizeof(char));
    if(!guf)
    {
        printf("Failure in allocation memory");
        exit(1);
    }
    
     i=0;
         while(i<len)
            {
                guf[i]=fgetc(tp);
                if(guf[i]=='/') guf[i]='\n';
                i++;
            }
         guf[i++]='\0';
        
        if (!guf)
        {
            printf("Failure in convertation from unicode!\n");
            exit(1);
        }
        rewind(tp);
        bSuccess = EnumServicesStatusEx(hSCManager, 
                                SC_ENUM_PROCESS_INFO,
                                SERVICE_WIN32, 
                                SERVICE_INACTIVE, 
                                (LPBYTE)&svc,
                                0,
                                &dwBytesNeeded, 
                                &dwServicesReturned,
                                0, 
                                NULL);
        
    if (!bSuccess ||( GetLastError()==ERROR_MORE_DATA))
    {
        DWORD dwBytes = dwBytesNeeded;
        svc = (ENUM_SERVICE_STATUS_PROCESS*) new BYTE[dwBytes];
        EnumServicesStatusEx(hSCManager, 
                            SC_ENUM_PROCESS_INFO,
                            SERVICE_WIN32, 
                            SERVICE_INACTIVE, 
                            LPBYTE(svc),
                            dwBytes,
                            &dwBytesNeeded, 
                            &dwServicesReturned,
                            0, 
                            NULL);
    }
    char *str;
    str=(char*)malloc(sizeof(char));
 
    for(unsigned i=0; i<dwServicesReturned; i++){
        str = myclass::unicode_to_ansi(svc[i].lpDisplayName);
        fputs(str, tp);
        fputs(" - ", tp);
        str = myclass::unicode_to_ansi(svc[i].lpServiceName);
        fputs(str, tp);
        fputs(" /", tp);
    }
 
    len=ftell(tp);
    rewind(tp);
     str=(char*)calloc(len,sizeof(char));
    if(!str)
    {
        printf("Failure in allocation memory");
        exit(1);
    }
    
     i=0;
         while(i<len)
            {
                str[i]=fgetc(tp);
                if(str[i]=='/') str[i]='\n';
                i++;
            }
         str[i++]='\0';
        
        if (!str)
        {
            printf("Failure in convertation from unicode!\n");
            exit(1);
        }
 
        i=0;
        setlocale(0,".1251");
        while(1)
        {
            system("cls");
            printf("Press \"q\" to exit\n");
            printf("Press \"f\" to show active services\n");
            printf("Press \"e\" to show inactive services\n");
            printf("Press \"t\" to show all services\n");
            x=getch();
            if (x=='f') count=1;
                else if (x=='e') count=2; 
                else if (x=='t') count=3;
                else if (x=='q') {
                    str=(char*)realloc(str,sizeof(char));   
                    free(str);
                    fclose(tp);
                    remove("out.txt");
                    break;}
            if (count==1) 
            {
                printf("\n\nNAME -  ACTIVE SERVICES\n\n");
                if(guf!='\0')
                printf("%s\n\n",guf);
    
                count=0;
            }
            else if(count==2)
            {
                printf("\n\nNAME -  INACTIVE SERVICES\n\n");
                if(str!='\0')
                printf("%s\n\n",str);
                
                count=0;
            }
            else if(count==3)
            {
                printf("\n\nNAME -  ALL SERVICES\n\n");
                printf("%s\n\n",str);
                printf("%s\n\n",guf);
                
                count=0;
            }
           system("pause");
        }
    
    CloseServiceHandle(hSCManager);
    
    };
 
 
    void myclass::GetProcessList(char*buf)
    {
        HANDLE hProcessSnap;
         PROCESSENTRY32 pe32;
         int i=0,count=0;;
         char x;
         FILE *fp;
        if(!(fp=fopen("out.txt","w+")))
          {
               printf("Failure in generation file(1)!\n");
                exit(1);
         }
 
         hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
 
         pe32.dwSize = sizeof( PROCESSENTRY32 );
 
         buf =(char*) realloc(buf, pe32.dwSize);
 
         if( !Process32First( hProcessSnap, &pe32 ))
         {
            CloseHandle( hProcessSnap );          
           return;
         }
         do{
             buf = myclass::unicode_to_ansi(pe32.szExeFile);
             fputs(buf, fp);
             fputs(" /", fp);
        } while( Process32Next( hProcessSnap, &pe32 ) );
 
         rewind(fp);
 
         while((buf[i]=fgetc(fp)) != EOF)
            { 
                if(buf[i]=='/') buf[i]='\n';
                i++;
            }
 
         int len=strlen(buf);
        
        if (!buf)
        {
            printf("Failure in convertation from unicode!\n");
            exit(1);
        }
 
        i=0;
 
        while(1)
        {
            system("cls");
            printf("Press \"q\" to changeover the services. There is no way back.\n");
            printf("Press \"s\" to show processes\n");
            x=getch();
            if (x=='s') count=20;
                else if (x=='q') {
                    fclose(fp);
                    remove("out.txt");
                    break;
                }
            if (count) 
            {
                printf("\n\nPROCESS\n\n");
                if(buf!='\0')
                printf("%s\n\n",buf);
                
                count=0;
            }
           system("pause");
        }
         CloseHandle( hProcessSnap );
    };
 
    char* myclass::unicode_to_ansi(wchar_t *unicode_string)
    {
        int sz;
    char *str;
    int str_len = WideCharToMultiByte(
        1251,               // Code page
        0,                  // Default replacement of illegal chars
        unicode_string,     // Multibyte characters string
        -1,                 // Number of unicode chars is not known
        NULL,               // No buffer yet, allocate it later
        0,                  // No buffer
        NULL,               // Use system default
        NULL                // We are not interested whether the default char was used
        );
    if (!str_len) 
    {
        printf("Failure in getting ANSI string length\n");
        exit(1);
    }
    str = (char*)calloc(str_len, sizeof(char));
    if (!str) 
    {
        printf("Failure in allocation ANSI string(1)\n");
        exit(1);
    }
    sz = WideCharToMultiByte(
        1251,               
        0,                  
        unicode_string,     
        -1,                 
        str,                
        str_len,            
        NULL,               
        NULL                
        );
    if (!sz)
    {
        printf("Convertation failure from unicode\n");
        free(str);
        exit(1);
    }
    return str;
    };
 
}
г) компиляция. Если успех, то идем дальше.
2.Создание приложения.
а)все тоже самое, только не dll, а console application- empty project - finish/
б) копируем из dll заголовок, саму dll(в папке debug) и Object File Library, вставляем в наше приложение(в папку я имею в виду) и подключаем заголовок.
в) main я уже заливал. cpp файл, в котором описываем все действия с функциями.
г) properties нашего проекта(приложения) - linker - input - additional dependencies - пишем нашу библиотеку .lib, которую копировали. нажимаем принять, а оптом только ОК.
д) Компилируем проект.
и вот на пункте Д он у меня лажает.
я проверял этот способ создания приложения на обычном выводе сообщения в консоль. и он работал. то есть это рабочий вариант. поэтому я не понимаю в чем дело.
Помогите

Добавлено через 2 часа 12 минут
Как избежать этого декодирования?
пробовал extern "c".
не помогает.

неужели остается только def юзать? я читал, что это прошлый век.
если других вариантов нет, то может ХОТЬ КТО-НИБУДЬ помочь мне написать его? я не понимаю как писать, какой файл создавать, куда подключать?
0
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
03.05.2012, 08:31
Цитата Сообщение от Ilyaa Посмотреть сообщение
Собственно ошибку приложил в виде скринсейвера. Не понимаю в чем проблема.
Где-то функция main и unicode_to_ansi уже реализованы. Предполагаю в wtf.cpp. Вам вообще нужен wtf.cpp?

Цитата Сообщение от Ilyaa Посмотреть сообщение
обычный cpp работал без проблем. а теперь....неужели в dll нельзя использовать FILE?
Чтобы использовать FILE* нужно подключить stdio.h

Цитата Сообщение от Ilyaa Посмотреть сообщение
Кто-нибудь подскажите в чем ошибка.
Попробуйте в реализациях соответствующих функций добавить __declspec(dllexport). Пример:
C++
1
2
3
4
__declspec(dllexport) void myclass::GetServiceList(char *guf)
{
// ...
}

Не по теме:

Насколько я понял, Вы прогаете так: если есть проблемы, попробуем по другому. Это не хорошо. Нужно выяснить (самому например) "почему так не работает".



Добавлено через 4 минуты
А вообще где Вы прочитали, что экспортируемые из DLL функции можно реализовать в виде класса с функциями и пространством имен?
0
21 / 21 / 3
Регистрация: 29.04.2012
Сообщений: 214
03.05.2012, 22:23  [ТС]
Точка входа не найдена

В чем тут проблема? Точка входа не найдена. это dll плохо написана или приложение? я как раз пытаюсь это понять и исправить проблему. ИНаче бы давно def написал, но я так не хочу.

Если честно это я увидел на ютубе и попробовал с обычным выводом сообщения "Hello world". сработало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.05.2012, 22:23
Помогаю со студенческими работами здесь

Открыть Диспетчер задач
почему не открывает Диспетчер задач. Помогите, плез case WM_LBUTTONDOWN: HANDLE FileHandle; FileHandle =...

Диалоговое окно и диспетчер задач
При создании диалогового окна командами MessageBox/DialogBox/CreateDialog - окна отображаются, но не видны ни в диспетчере задач, ни на...

Как с использованием c++ вызвать диспетчер задач Windows?
Приветствую. Как можно вызвать диспетчер задач? Гугл уже не помогает .Есть ли мануалы по вызову разных системных окон? Диспетчер Задач,...

Подскажите, как скрыть окно приложения из Диспетчер задач -> Приложения?
Чтобы его скрыть из панели задач делаю так HWND wnd = Form2-&gt;Handle; ShowWindow(wnd, SW_HIDE); SetWindowLong(wnd, GWL_EXSTYLE,...

Написать диспетчер задач
Доброго времени суток форумчане. Помогите с чего начать или может есть ресурс с похожей темой. Дали задание (курсовой) по системному...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru