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

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

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

Студворк — интернет-сервис помощи студентам
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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2014, 22:46
Ответы с готовыми решениями:

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

Реестр закрывается сразу после открытия
Пропал автозапуск гаджетов рабочего стола. Реестр закрывается сразу после открытия, тоже самое с Daemon Tools Lite, еще когда на флешку...

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

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

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

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

Не по теме:

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

0
 Аватар для Alex566
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
11.04.2014, 01:08
Цитата Сообщение от 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  [ТС]
Alex566, с оконным классом ничего не изменилось, правда все нули куда надо выставила руками, без мемсета. Толку разумеется никакого, потому что окошечко мое просто шикарно закрывается, получив сразу после создания WM_CLOSE. Проблема то не в создании окна, а в том, чтоб оно не закрывалось сразу же.

Не по теме:

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



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

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

Цитата Сообщение от Angeline Посмотреть сообщение
К тому же сей факт не снимает вопроса о полезности ультимативной студии.
Ну лично мне приходится работать с ATL и MFC которого нет в експресс. Да и с окнами ресурсами значительно проще работать.
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
11.04.2014, 10:21  [ТС]
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
 Аватар для Alex566
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
11.04.2014, 16:35
Цитата Сообщение от Angeline Посмотреть сообщение
Все, спасибо, проблема решилась.
Так в чем же она все-таки заключалась?
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
12.04.2014, 00:41
Может в версии Винды? Я на XP проверял.
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
12.04.2014, 10:01  [ТС]
Да то что с WM_COMMAND в случае, если не от кнопки, не перескакивало на default.Alex566 Digit@ll
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.04.2014, 10:01
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru