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

Точка входа не найдена - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 213
01.05.2012, 21:08     Точка входа не найдена #1
написал dll и создал приложение. Как проге показать эту самую точку входа?
Миниатюры
Точка входа не найдена  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2012, 21:08     Точка входа не найдена
Посмотрите здесь:

Точка входа C++
Точка входа должна быть определена C++
точка входа в процедуру не найдена в библиотеке dll C++
C++ Точка входа должна быть определена
C++ Точка входа в dll в Linux
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
02.05.2012, 00:27     Точка входа не найдена #2
Цитата Сообщение от Ilyaa Посмотреть сообщение
написал dll и создал приложение
Исходный код обоих в студию.
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 213
02.05.2012, 01:06  [ТС]     Точка входа не найдена #3
DLL:
cpp
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
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
#include "simpleH.h"
 
namespace simple{
    
    void myclass::GetServiceList(char *guf)
{
    int count=0,i=0;
    char *str;
    str = (char*)malloc(sizeof(char));
    if (!str) 
    {
          printf("Failure in allocation ANSI string(3)\n");
          exit(1);
    }
    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);
    }
 
    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);
    }
 
    setlocale(0,".1251");
    printf("NAME -  ALL SERVICES\n");
    printf("\nINACTIVE SERVICES\n\n");
    printf("%s\n",str);
    printf("\nACTIVE SERVICES\n\n");
    printf("%s\n",guf);
    str=(char*)realloc(str,sizeof(char));   
    free(str);
    fclose(tp);
    remove("out.txt");
 
    CloseServiceHandle(hSCManager);
    
};
 
 
    void myclass::GetProcessList(char*buf)
    {
        HANDLE hProcessSnap;
        PROCESSENTRY32 pe32;
        int i=0,count=0;;
        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 = 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++;
        }
        buf[i++]='\0';
 
        if (!buf)
        {
            printf("Failure in convertation from unicode!\n");
            exit(1);
        }
 
        fclose(fp);
        remove("out.txt");
        printf("PROCESSES\n\n");
        printf("%s\n",buf);
 
        CloseHandle( hProcessSnap );
};
 
    char* myclass::unicode_to_ansi(wchar_t *unicode_string)
    {
        int sz;
        char *str;
        int str_len = WideCharToMultiByte(
            1251,               
            0,                  
            unicode_string,     
            -1,                 
            NULL,               
            0,                  
            NULL,               
            NULL);
        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;
};
 
 
 
}
.h
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace simple{
 
    class myclass{
 
    public:
    static __declspec(dllexport) void __stdcall GetProcessList(char*buf);
    static      __declspec(dllexport) char * unicode_to_ansi(wchar_t *unicode_string);
    static __declspec(dllexport) void __stdcall GetServiceList(char *guf);
    };
}
 
#pragma comment(linker, "/export:GetServiceList=?GetServiceList@myclass@simple@@SGXPAD@Z")
#pragma comment(linker, "/export:GetProcessList=?GetProcessList@myclass@simple@@SGXPAD@Z")
    #pragma comment(linker, "/export:GetServiceList=?GetServiceList@simple@@YAXPAD@Z")
Приложение:
cpp
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
#define _CRT_SECURE_NO_WARNINGS
#include "simpleH.h"
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
# include<conio.h>
 
using namespace simple;
 
 
int main()
{
        char *buf,*guf;
        buf = (char*)malloc(sizeof(char));
        guf = (char*)malloc(sizeof(char));
        if (!buf) 
        {
              printf("Failure in allocation ANSI string(1)\n");
              exit(1);
        }
        
        if (!guf) 
        {
          printf("Failure in allocation ANSI string(2)\n");
          exit(1);
        }
 
        myclass::GetProcessList(buf);
        myclass::GetServiceList(guf);
        system("pause");
 
        free(guf);
        free(buf);
        return 0;
}
.h та же самая.
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
02.05.2012, 09:43     Точка входа не найдена #4
Цитата Сообщение от Ilyaa Посмотреть сообщение
.h та же самая.
Точно? Там должны быть dllimport/import.
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 213
02.05.2012, 16:56  [ТС]     Точка входа не найдена #5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
namespace simple{
 
    class myclass{
 
    public:
    static __declspec(dllimport ) void __stdcall GetProcessList(char*buf);
    static      __declspec(dllimport ) char * __stdcall unicode_to_ansi(wchar_t *unicode_string);
    static __declspec(dllimport ) void __stdcall GetServiceList(char *guf);
    };
}
 
#pragma comment(linker, "/export:GetServiceList=?GetServiceList@myclass@simple@@SGXPAD@Z")
#pragma comment(linker, "/export:GetProcessList=?GetProcessList@myclass@simple@@SGXPAD@Z")
Переделал вот так. Эффекта ноль.Может надо совместить? Написать каждую функцию дважды с экоспортом и импортом?

Не помогло.
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
02.05.2012, 21:15     Точка входа не найдена #6
А в прагме кто будет исправлять? Откровенно говоря, такой работы с длл я еще не видел.
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 213
02.05.2012, 21:24  [ТС]     Точка входа не найдена #7
Лажовая работа или что не так?

Добавлено через 5 минут
Кстати ошибка осталась
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
02.05.2012, 22:24     Точка входа не найдена #8
Цитата Сообщение от Ilyaa Посмотреть сообщение
Лажовая работа или что не так?
Нет, просто я реально такого способа не видел. Через линкер, импорт и собак. Кстати вы длл прописали в проекте? Если все еще не будет работать - попробуйте обычный способ (екстерн си и либ-файл).
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 213
03.05.2012, 09:51  [ТС]     Точка входа не найдена #9
Что значит прописать dll? Я в настройках указал файл .lib а насчет dll не знаю.

обычный способ это extern "C" SimpleDLL.lib
и все?
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
03.05.2012, 10:29     Точка входа не найдена #10
Посмотрите в википедии на тему длл.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2012, 01:34     Точка входа не найдена
Еще ссылки по теме:

точка входа в процедуру __gxx_personality_v0 не найдена C++
Где точка входа приложения? C++
Точка входа отличная от main/WinMain C++

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

Или воспользуйтесь поиском по форуму:
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 213
04.05.2012, 01:34  [ТС]     Точка входа не найдена #11
Цитата Сообщение от HighPredator Посмотреть сообщение
Нет, просто я реально такого способа не видел. Через линкер, импорт и собак.
А что Вы хотите, если экспорт, импорт не пашет, собаки тоже.

extern "c" сделал, а с либом что? можете подсказать? как ее описать в *.h файле?
C
1
2
3
extern "C" __declspec(dllexport) void  __stdcall GetProcessList(char*buf);
extern "C" __declspec(dllexport) char * unicode_to_ansi(wchar_t *unicode_string);
extern "C" __declspec(dllexport) void  __stdcall GetServiceList(char *guf);
Это содержание *.h

Кстати extern "c" выдает вообще Ошибку линковки.

Добавлено через 16 минут
"Make sure you include Example.lib file (assuming that Example.dll is generated) in the project (Add Existing Item option for Project!) before static linking."

НО там не сказано как подключать. (на вики)

Насколько я понял экспорт я должен указать при создании dll, а импорт при созданиии приложения?

Переписал на extern "C". Насчет *.lib, я подключаю его к приложению. Знаичт все делаю правильно.
НО эффект тот же, что и при классах, и собаках

Добавлено через 17 минут
ОНА РАБОТАЕТ.

Теперь у меня другая лажа....Когда я запускаю прогу через вижуал студио - работает. КОгда беру через exe-файл отдельно - не работает...

Добавлено через 4 минуты
Так. создал новое приложение. Там видна ошибка. getprocesslist запускается, а service выдает ошибку....может кто-то может углядеть ее? я не вижу.

Добавлено через 28 минут
Творится какой-то треш. Будто С вижуалкой что-то не то. Стоит экспресс, установлю про 2010 и посмотрю

Добавлено через 54 минуты
Короче она работает) Большое спасибо за поддержку, HighPredator, но на самом деле я зря срал кирпичами. Хотите объясню причину по которой он не видел точку входа?)

Добавлено через 1 минуту
Это старый проект. я в нем уже создавал тестовую dll "hello world". и я просто на той же базе написал свою программу. Она не работала лишь потому, что в папке Дебаг рядом с ехе-файлом лежала старая dll)) и она обращалась к ней, ведь старая dll имеет такое же название. Короче я долго пялился в монитор и думал, как же надо было так затупить...

Добавлено через 42 минуты
ЭЭэээээ...извините за спонтанность, но прога нестабильна)
При входе в процедуры что-то с кучей происходит непонятное...может кто-нибудь это обхяснить?

Добавлено через 1 минуту
_CrtIsValidHeapPointer( pUserData )
Yandex
Объявления
04.05.2012, 01:34     Точка входа не найдена
Ответ Создать тему
Опции темы

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