Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
1

Приложение закрывается сразу после открытия

10.04.2014, 22:46. Показов 4112. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
VS 2013 Express, юникодовый проект, запускаю в конфигурации Debug платформа Win32. Приложение открывается и сразу же закрывается. После цикла обработки сообщений в связи с проблемкой добавлен вывод кода последней ошибки в MessageBox. Ошибка 0. Скрин прилагается. Если бы не MessageBox приложение бы уже закрылось. Подскажите, из-за чего? В коде опущены:
1)Реализация функции my_StrToFloat
2)Обработчик сообщения WM_COMMAND(все равно на кнопки не нажмешь)
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
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NON_CONFORMING_SWPRINTFS
#include <Windows.h>
#include <sal.h>
#include <cwchar>
HWND MainHandle, EditIn, EditOut, StartButton;
const wchar_t *g_MainClass = L"MainWindow";
_Success_(return == true) bool my_StrToFloat(_In_ wchar_t* str, _In_ size_t SizeOfStr, _Inout_ float* converted);
LRESULT CALLBACK WndProc(HWND hwnd, UINT Comand, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE phInst, LPSTR cmdLine, int CmdShow)
{
    WNDCLASSEX MainWindow =
    {
        sizeof(WNDCLASSEX),
        CS_VREDRAW | CS_HREDRAW,
        WndProc,
        NULL,
        NULL,
        hInst,
        LoadIcon(MainWindow.hInstance, MAKEINTRESOURCE(IDI_APPLICATION)),
        LoadCursor(MainWindow.hInstance, MAKEINTRESOURCE(IDC_ARROW)),
        (HBRUSH)(31),
        NULL,
        g_MainClass,
        LoadIcon(MainWindow.hInstance, MAKEINTRESOURCE(IDI_APPLICATION))
    };
    if (!RegisterClassEx(&MainWindow))
    {
        wchar_t *error= (wchar_t*)calloc(100,sizeof(wchar_t));
        wsprintf(error, L"error %d", GetLastError());
        MessageBox(NULL, error, L"Error", MB_OK);
        return 1;
    }
    MainHandle = CreateWindow(g_MainClass, L"Одномерные массивы", WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 600, 600, NULL, NULL, hInst, NULL);
    if (!MainHandle)
    {
        wchar_t *error = (wchar_t*)calloc(100,sizeof(wchar_t));
        wsprintf(error, L"error %d", GetLastError());
        MessageBox(NULL, error, L"Error", MB_OK);
        return 2;
    }
    StartButton = CreateWindow(L"Button", L"Start", WS_CHILD |WS_CLIPSIBLINGS | BS_PUSHBUTTON | WS_VISIBLE, 200, 400, 100, 50, MainHandle, (HMENU)1, hInst, NULL);
    if (!StartButton)
    {
        wchar_t *error = (wchar_t*)calloc(100,sizeof(wchar_t));
        wsprintf(error, L"error %d", GetLastError());
        MessageBox(NULL, error, L"Error", MB_OK);
        return 3;
    }
    EditIn = CreateWindow(L"Edit", L"Введите числа через запятую", WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | ES_AUTOHSCROLL, 5, 5, 400, 20, MainHandle, (HMENU)2, hInst, NULL);
    if (!EditIn)
    {
        wchar_t *error = (wchar_t*)calloc(100,sizeof(wchar_t));
        wsprintf(error, L"error %d", GetLastError());
        MessageBox(NULL, error, L"Error", MB_OK);
    }
    EditOut = CreateWindow(L"Edit", L"", WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | ES_AUTOVSCROLL | ES_MULTILINE | WS_VSCROLL, 5, 50, 400, 300, MainHandle, (HMENU)3, hInst, NULL);
    if (!EditOut)
    {
        wchar_t *error = (wchar_t*)calloc(100,sizeof(wchar_t));
        wsprintf(error, L"error %d", GetLastError());
        MessageBox(NULL, error, L"Error", MB_OK);
        return 4;
    }
    ShowWindow(MainHandle, SW_NORMAL);
    UpdateWindow(MainHandle);
    ShowWindow(EditIn,SW_NORMAL);
    ShowWindow(EditOut,SW_NORMAL);
    ShowWindow(StartButton,SW_NORMAL);
    UpdateWindow(StartButton);
    UpdateWindow(EditIn);
    UpdateWindow(EditOut);
    MSG msg;
    while (GetMessage(&msg,NULL,NULL,NULL))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    wchar_t* last = new wchar_t;
    wsprintf(last, L"error %d", GetLastError());
    MessageBox(NULL, last, last, MB_OK);
    return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT Comand, WPARAM wParam, LPARAM lParam)
{
    switch (Comand)
    {   
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, Comand, wParam, lParam);
        break;
    }
    return 0;
}
PS ответы "там глупая ошибка, ищи самостоятельно" прошу не постить, лучше помогите разобраться, что это за "глупая ошибка".
Миниатюры
Приложение закрывается сразу после открытия  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2014, 22:46
Ответы с готовыми решениями:

Закрывается приложение после растягивания главной формы (xp)
В семерке всё работает нормально. В xp после растягивания главной формы приложение закрывается. ...

Реестр закрывается сразу после открытия
Пропал автозапуск гаджетов рабочего стола. Реестр закрывается сразу после открытия, тоже самое с...

BAT закрывается сразу после открытия
Здравствуйте! Написал небольшой bat: cd C:\Users\User\AppData\Roaming\Updater1C start Updater1C...

AutoLogger закрывается сразу после открытия Internet Explorer, файл с логами не появляется в папке
Здравствуйте! Для получения помощи в лечении пытаюсь создать логи с помощью AutoLogger. ...

12
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
10.04.2014, 23:51 2
Возможно какие-то тонкости експресс студии. Вот тот же код в vs 2013 ultimate:
Миниатюры
Приложение закрывается сразу после открытия  
0
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
11.04.2014, 00:14 3
Да, проблем нет. Но с таким методом вывода кода ошибки у мну выдает 1400.

__________________
MSVS 2008 Professional Edition.
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
11.04.2014, 00:21  [ТС] 4
Alex566, смешно, но вчера запускалось, сегодня уже нет без каких-либо правок.

Digit@ll, и как мне это 1400 поправлять?
0
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
11.04.2014, 00:30 5
Причина ошибки 1400 в этой строке (Дескриптор окна не был передан параметром):
Миниатюры
Приложение закрывается сразу после открытия  
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
11.04.2014, 00:52  [ТС] 6
Alex566, судя по тому, что без него работало раньше, а с ним теперь не заработало все равно, видимо не самый критичный параметр. У меня вот ничего не изменилось.

Не по теме:

И как, стоит Ultimate версия свои полмиллиона?

0
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
11.04.2014, 01:08 7
Цитата Сообщение от Angeline Посмотреть сообщение
Alex566, судя по тому, что без него работало раньше, а с ним теперь не заработало все равно, видимо не самый критичный параметр. У меня вот ничего не изменилось.
Да это на вопрос диджитала по поводу ошибки 1400.

Попробуйте по другому проинициализировать оконный класс. Например как-то так:
C++
1
2
3
4
5
6
7
8
9
10
    WNDCLASSEX MainWindow;
    memset(&MainWindow, NULL, sizeof(WNDCLASSEX));
    MainWindow.cbSize = sizeof(WNDCLASSEX);
    MainWindow.hCursor = LoadCursor(NULL, IDC_ARROW);
    MainWindow.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    MainWindow.hInstance = hInst;
    MainWindow.lpfnWndProc = WndProc;
    MainWindow.lpszClassName = g_MainClass;
    if (!RegisterClassEx(&MainWindow))
    {...
Т. к. если верить дебагеру структура не совсем правильно заполняется.

Цитата Сообщение от Angeline Посмотреть сообщение
И как, стоит Ultimate версия свои полмиллиона?
При первой установке дается 90 дней потом можно переустановить =)
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
11.04.2014, 01:26  [ТС] 8
Alex566, с оконным классом ничего не изменилось, правда все нули куда надо выставила руками, без мемсета. Толку разумеется никакого, потому что окошечко мое просто шикарно закрывается, получив сразу после создания WM_CLOSE. Проблема то не в создании окна, а в том, чтоб оно не закрывалось сразу же.

Не по теме:

А жульничать плохо! К тому же сей факт не снимает вопроса о полезности ультимативной студии.



Добавлено через 1 минуту
АРРРР!!! Объясните мне уже наконец, при каком расположении планет правильная программа работает как надо!?

Добавлено через 2 минуты
Кстати, а вот анализ кода дает вот такой ворнинг:
warning C28251: Несогласованная аннотация для "WinMain": данный экземпляр содержит нет аннотаций. См. c:\program files (x86)\windows kits\8.1\include\um\winbase.h(905).
0
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
11.04.2014, 02:24 9
Цитата Сообщение от Angeline Посмотреть сообщение
Проблема то не в создании окна, а в том, чтоб оно не закрывалось сразу же.
Почему вы исключили вариант что закрывается оно как раз от того что создано было не правильно? В цикле обработки сообщений по сути и ошибки допускать негде. И проект вы пробовали пересоздать? Может в конфигурациях что-то не так.
Проверил на другом устройстве с експресс студией все работает на столько же хорошо.

Цитата Сообщение от Angeline Посмотреть сообщение
К тому же сей факт не снимает вопроса о полезности ультимативной студии.
Ну лично мне приходится работать с ATL и MFC которого нет в експресс. Да и с окнами ресурсами значительно проще работать.
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
11.04.2014, 10:21  [ТС] 10
Alex566, а в полном виде запустится?
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
363
364
365
366
367
368
369
370
371
372
373
374
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NON_CONFORMING_SWPRINTFS
#include <Windows.h>
#include <sal.h>
#include <cwchar>
HWND MainHandle, EditIn, EditOut, StartButton;
const wchar_t *g_MainClass = L"MainWindow";
_Success_(return == true) bool my_StrToFloat(_In_ wchar_t* str, _In_ size_t SizeOfStr, _Inout_ float* converted);
LRESULT CALLBACK WndProc(HWND hwnd, UINT Comand, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE phInst, LPSTR cmdLine, int CmdShow)
{
    WNDCLASSEX MainWindow =
    {
        sizeof(WNDCLASSEX),
        CS_VREDRAW | CS_HREDRAW,
        WndProc,
        NULL,
        NULL,
        hInst,
        LoadIcon(NULL,IDI_APPLICATION),
        LoadCursor(NULL,IDC_ARROW),
        (HBRUSH)(31),
        NULL,
        g_MainClass,
        LoadIcon(NULL,IDI_APPLICATION)
    };
    if (!RegisterClassEx(&MainWindow))
    {
        wchar_t *error= (wchar_t*)calloc(100,sizeof(wchar_t));
        wsprintf(error, L"error %d", GetLastError());
        MessageBox(NULL, error, L"Error", MB_OK);
        return 1;
    }
    MainHandle = CreateWindow(g_MainClass, L"Одномерные массивы", WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 600, 600, NULL, NULL, hInst, NULL);
    if (!MainHandle)
    {
        wchar_t *error = (wchar_t*)calloc(100,sizeof(wchar_t));
        wsprintf(error, L"error %d", GetLastError());
        MessageBox(NULL, error, L"Error", MB_OK);
        return 2;
    }
    StartButton = CreateWindow(L"Button", L"Start", WS_CHILD |WS_CLIPSIBLINGS | BS_PUSHBUTTON | WS_VISIBLE, 200, 400, 100, 50, MainHandle, (HMENU)1, hInst, NULL);
    if (!StartButton)
    {
        wchar_t *error = (wchar_t*)calloc(100,sizeof(wchar_t));
        wsprintf(error, L"error %d", GetLastError());
        MessageBox(NULL, error, L"Error", MB_OK);
        return 3;
    }
    EditIn = CreateWindow(L"Edit", L"Введите числа через запятую", WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | ES_AUTOHSCROLL, 5, 5, 400, 20, MainHandle, (HMENU)2, hInst, NULL);
    if (!EditIn)
    {
        wchar_t *error = (wchar_t*)calloc(100,sizeof(wchar_t));
        wsprintf(error, L"error %d", GetLastError());
        MessageBox(NULL, error, L"Error", MB_OK);
    }
    EditOut = CreateWindow(L"Edit", L"", WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | ES_AUTOVSCROLL | ES_MULTILINE | WS_VSCROLL, 5, 50, 400, 300, MainHandle, (HMENU)3, hInst, NULL);
    if (!EditOut)
    {
        wchar_t *error = (wchar_t*)calloc(100,sizeof(wchar_t));
        wsprintf(error, L"error %d", GetLastError());
        MessageBox(NULL, error, L"Error", MB_OK);
        return 4;
    }
    ShowWindow(MainHandle, SW_NORMAL);
    UpdateWindow(MainHandle);
    ShowWindow(EditIn,SW_NORMAL);
    ShowWindow(EditOut,SW_NORMAL);
    ShowWindow(StartButton,SW_NORMAL);
    UpdateWindow(StartButton);
    UpdateWindow(EditIn);
    UpdateWindow(EditOut);
    MSG msg;
    while (GetMessage(&msg,MainHandle,NULL,NULL))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    wchar_t* last = new wchar_t;
    wsprintf(last, L"error %d", GetLastError());
    MessageBox(NULL, last, last, MB_OK);
    return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT Comand, WPARAM wParam, LPARAM lParam)
{
    switch (Comand)
    {
    case WM_COMMAND:
        switch (wParam)
        {
        case 1:
            wchar_t *input_str = (wchar_t*)calloc(100, sizeof(wchar_t));
            GetWindowText(EditIn, input_str, GetWindowTextLength(EditIn));
            float* workptr = (float*)calloc(100, sizeof(float)); float mult = 1;
            wchar_t *output_str = (wchar_t*)calloc(100, sizeof(wchar_t));
            if (!my_StrToFloat(input_str, GetWindowTextLength(EditIn), workptr)) return NULL;
            SendMessage(EditOut, WM_SETTEXT, NULL, (LPARAM)L"Положительные числа:\n\0");
            int p = 1; int n = 1;
            for (int i = 0; i < sizeof(workptr) / sizeof(float); i++)
            {
                if (workptr[i]>0)
                {
                    switch (p)
                    {
                    case 1:
                        swprintf(output_str, L"1st=%f\n\0", workptr[i]);
                        break;
                    case 2:
                        swprintf(output_str, L"2nd=%f\n\0", workptr[i]);
                        break;
                    case 3:
                        swprintf(output_str, L"3rd=%f\n\0", workptr[i]);
                        break;
                    default:
                        swprintf(output_str, L"%dth=%f\n\0", p, workptr[i]);
                        break;
                    }
                    mult *= workptr[i];
                    int n = SendMessage(EditOut, EM_LINEINDEX, SendMessage(EditOut, EM_GETLINECOUNT, NULL, NULL) - 1, NULL);
                    n += SendMessage(EditOut, EM_LINELENGTH, NULL, (LPARAM)n);
                    SendMessage(EditOut, EM_SETSEL, (WPARAM)n, (LPARAM)n);
                    SendMessage(EditOut, EM_REPLACESEL, NULL, (LPARAM)output_str);
                }
            }
            n = SendMessage(EditOut, EM_LINEINDEX, SendMessage(EditOut, EM_GETLINECOUNT, NULL, NULL) - 1, NULL);
            n += SendMessage(EditOut, EM_LINELENGTH, NULL, (LPARAM)n);
            SendMessage(EditOut, EM_SETSEL, (WPARAM)n, (LPARAM)n);
            SendMessage(EditOut, EM_REPLACESEL, NULL, (LPARAM)L"Отрицательные числа:\n\0");
            for (int i = 0; i < sizeof(workptr) / sizeof(float); i++)
            {
                if (workptr[i] < 0)
                {
                    switch (n)
                    {
                    case 1:
                        swprintf(output_str, L"1st=%f\n\0", workptr[i]);
                        break;
                    case 2:
                        swprintf(output_str, L"2nd=%f\n\0", workptr[i]);
                        break;
                    case 3:
                        swprintf(output_str, L"3rd=%f\n\0", workptr[i]);
                        break;
                    default:
                        swprintf(output_str, L"%dth=%f\n\0", n, workptr[i]);
                        break;
                    }
                    mult *= workptr[i];
                    int n = SendMessage(EditOut, EM_LINEINDEX, SendMessage(EditOut, EM_GETLINECOUNT, NULL, NULL) - 1, NULL);
                    n += SendMessage(EditOut, EM_LINELENGTH, NULL, (LPARAM)n);
                    SendMessage(EditOut, EM_SETSEL, (WPARAM)n, (LPARAM)n);
                    SendMessage(EditOut, EM_REPLACESEL, NULL, (LPARAM)output_str);
                }
 
            }
            int zero_count = 0;
            for (int i = 0; i < sizeof(workptr) / sizeof(float); i++)
            {
                if (workptr[i] == 0) zero_count++;
            }
            swprintf(output_str, L"Количество нулей: %d\0", zero_count);
            n = SendMessage(EditOut, EM_LINEINDEX, SendMessage(EditOut, EM_GETLINECOUNT, NULL, NULL) - 1, NULL);
            n += SendMessage(EditOut, EM_LINELENGTH, NULL, (LPARAM)n);
            SendMessage(EditOut, EM_SETSEL, (WPARAM)n, (LPARAM)n);
            SendMessage(EditOut, EM_REPLACESEL, NULL, (LPARAM)output_str);
            return 0;
            break;
        }
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, Comand, wParam, lParam);
        break;
    }
    return 0;
}
_Success_(return==true) bool my_StrToFloat(_In_ wchar_t* str, _In_ size_t SizeOfStr, _Inout_ float* converted)
{
    bool MainError = true;
    bool ZeroStartError = true;
    int start_point=0;
    int size=0;
    bool OneNumCheck = false;
    int SizeOfConverted = 0;
    for (int i = 0; i < SizeOfStr-1; i++)
    {
        if (&str[i] == L",") OneNumCheck = true;
    }
    if (!OneNumCheck) { MessageBox(NULL, L"Введите более одного числа", L"my_StrToFloat error", MB_OK); return false; }
    for (int i = 0; i < SizeOfStr - 1; i++)
    {
        switch (str[i])
        {
        case L'1':
            MainError = false;
            if (ZeroStartError)
            {
                ZeroStartError = false;
                start_point = i;
                size = 0;
            }
            else
            {
                size++;
            }
            break;
        case L'2':
            MainError = false;
            if (ZeroStartError)
            {
                ZeroStartError = false;
                start_point = i;
                size = 0;
            }
            else
            {
                size++;
            }
            break;
        case L'3':
            MainError = false;
            if (ZeroStartError)
            {
                ZeroStartError = false;
                start_point = i;
                size = 0;
            }
            else
            {
                size++;
            }
            break;
        case L'4':
            MainError = false;
            if (ZeroStartError)
            {
                ZeroStartError = false;
                start_point = i;
                size = 0;
            }
            else
            {
                size++;
            }
            break;
        case L'5':
            MainError = false;
            if (ZeroStartError)
            {
                ZeroStartError = false;
                start_point = i;
                size = 0;
            }
            else
            {
                size++;
            }
            break;
        case L'6':
            MainError = false;
            if (ZeroStartError)
            {
                ZeroStartError = false;
                start_point = i;
                size = 0;
            }
            else
            {
                size++;
            }
            break;
        case L'7':
            MainError = false;
            if (ZeroStartError)
            {
                ZeroStartError = false;
                start_point = i;
                size = 0;
            }
            else
            {
                size++;
            }
            break;
        case L'8':
            MainError = false;
            if (ZeroStartError)
            {
                ZeroStartError = false;
                start_point = i;
                size = 0;
            }
            else
            {
                size++;
            }
            break;
        case L'9':
            MainError = false;
            if (ZeroStartError)
            {
                ZeroStartError = false;
                start_point = i;
                size = 0;
            }
            else
            {
                size++;
            }
            break;
        case L'0':
            if (ZeroStartError && ((const wchar_t*)str[i + 1] != L"," || (const wchar_t*)str[i + 1] != L"\0")) { MessageBox(NULL, (const wchar_t*)L"Числа не могут начинаться с 0", (const wchar_t*)L"my_(const wchar_t*)strToFloat error", MB_OK); return false; }
            else
            {
                size++;
            }
            break;
        case L' ':
            if (!ZeroStartError) { MessageBox(NULL, L"Не используйте пробелы внутри чисел, а также между числами и запятыми", (const wchar_t*)L"my_(const wchar_t*)strToFloat error", MB_OK); return false; }
            break;
        case L'.':
            if (ZeroStartError)
            {
                start_point = i;
                ZeroStartError = false;
                size = 0;
            }
            else
            {
                size++;
            }
            break;
        case L'-':
            if (ZeroStartError && (const wchar_t*)str[i + 1] != L"0")
            {
                start_point = i;
                ZeroStartError = false;
                size = 0;
            }
            else
            {
                MessageBox(NULL, L"Обнаружен недопустимый символ", L"my_(const wchar_t*)strToFloat error", MB_OK);
                return false;
            }
            break;
        case L',':
            if (!ZeroStartError)
            {
                size++;
                wchar_t *temp = (wchar_t*)calloc(50, sizeof(wchar_t));
                converted[SizeOfConverted] = wcstof(wcsncpy(temp, str, size), NULL);
                size = 0;
                ZeroStartError = true;
            }
            break;
        case L'\0':
            MessageBox(NULL, L"Ошибка определения размера строки", L"my_StrToFloat error", MB_OK);
            return false;
            break;
        default:
            MessageBox(NULL, L"Обнаружен недопустимый символ.", L"my_StrToFloat error", MB_OK);
            return false;
            break;
        }
        if ((const wchar_t*)str[i + 1] == (const wchar_t*)L"\0")
        {
            wchar_t *temp = (wchar_t*)calloc(10, sizeof(wchar_t));
            converted[SizeOfConverted] = wcstof(wcsncpy(temp,(const wchar_t*)str,size),NULL);
            return true;
        }
    }
    return false;
}
Добавлено через 21 минуту
Все, спасибо, проблема решилась.
0
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
11.04.2014, 16:35 11
Цитата Сообщение от Angeline Посмотреть сообщение
Все, спасибо, проблема решилась.
Так в чем же она все-таки заключалась?
0
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
12.04.2014, 00:41 12
Может в версии Винды? Я на XP проверял.
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
12.04.2014, 10:01  [ТС] 13
Да то что с WM_COMMAND в случае, если не от кнопки, не перескакивало на default.Alex566 Digit@ll
0
12.04.2014, 10:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2014, 10:01
Помогаю со студенческими работами здесь

Приложение останавливается сразу после открытия
Приложение открывается и сразу has stoped просто пытаюсь присвоить текст TextView package...

Консольное приложение сразу закрывается
Здравствуйте, предупреждаю сразу, только начал изучать С#. Нашел лабораторные работы по C# и начал...

Консольное приложение сразу же закрывается
сделал программу в console жму Build Solution потом Start Debugging и открывается консоль и...

Почему приложение не закрывается сразу?
Есть код using System; using System.Windows.Forms; class New { public static void...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru