Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 214
#1

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

01.05.2012, 21:08. Просмотров 2970. Ответов 10
Метки нет (Все метки)

написал dll и создал приложение. Как проге показать эту самую точку входа?
0
Миниатюры
Точка входа не найдена  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2012, 21:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Точка входа не найдена (C++):

Точка входа в процедуру __gxx_personality_v0 не найдена - C++
Здравствуйте. Я пытаюсь сделать простейший пример библиотеки tgui (gui для sfml) Все компилируется, но при запуске приложения выскакивает...

Точка входа в процедуру не найдена в библиотеке dll - C++
пытаюсь подключить библиотеку вот такая ошибка, как бы поправить?

MinGW. Точка входа в процедуру __gxx_personality_v0 не найдена в библиотеке DLL /brut.exe - C++
Установил MinGW, создал батник, который компилирует файл. При запуске скомпилированного exe-шника выдаёт ошибку: Точка входа в процедуру...

Точка входа в процедуру InterlockedCompareExchange64 не найдена в библиотеке DLL KERNEL32.DLL - C++
День добрый! При запуске моей программы (много моего кода + много разных сторонних dll) на WinXP SP2, получаем соответствующую ошибку...

Ошибка: "Точка входа в процедуру gxx_personality_sj0 не найдена" при запуске приложения - C++
имеется код: #include <SFML/Graphics.hpp> int main() { sf::RenderWindow window(sf::VideoMode(200, 200), "test"); ...

Точка входа - C++
Подскажите пожалуйста как найти точку входа приложения?

10
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
02.05.2012, 00:27 #2
Цитата Сообщение от Ilyaa Посмотреть сообщение
написал dll и создал приложение
Исходный код обоих в студию.
1
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 214
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 та же самая.
0
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
02.05.2012, 09:43 #4
Цитата Сообщение от Ilyaa Посмотреть сообщение
.h та же самая.
Точно? Там должны быть dllimport/import.
1
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 214
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")
Переделал вот так. Эффекта ноль.Может надо совместить? Написать каждую функцию дважды с экоспортом и импортом?

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

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

обычный способ это extern "C" SimpleDLL.lib
и все?
0
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
03.05.2012, 10:29 #10
Посмотрите в википедии на тему длл.
0
Ilyaa
20 / 20 / 3
Регистрация: 29.04.2012
Сообщений: 214
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 )
0
04.05.2012, 01:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2012, 01:34
Привет! Вот еще темы с ответами:

Точка входа в dll в Linux - C++
Если в Windows точка входа в DLL является функция BOOL WINAPI DllMain(...), то какая функция является началом в системе Linux? И какие...

Где точка входа приложения? - C++
В общем, есть 3 файла. Разбирать их содержимое не нужно, меня интересует только конструкции include. Итак, файл main.cpp: #include...

Точка входа должна быть определена - C++
#include &lt;iostream&gt; using namespace std; template&lt;class T&gt; T min2(T a,T b) { return a&lt;b? a: b; } int main() ...

Точка входа отличная от main/WinMain - C++
Случайно наткнулся на код и прямо-таки заинтересовало: Собственно: Насколько я понимаю проблема как раз в SubSystem. Несколько не...


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

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

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