![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| nic1986 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.7.2009 Репутация: 1 Всего: 1 |
студия мне рассказывает что соглашение о вызове не то(Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.). Но ведь в в самом winuser.h оно прописано как __stdcall Что же не так? |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
| nic1986 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.7.2009 Репутация: 1 Всего: 1 |
xvr, Я вас не понял,у меня там и так соглашение о вызове __stdcall А проблема оказалась в багнутых настройках стека https://support.microsoft.com/en-us/kb/822039 Студия с каждой версией становиться все более корявой(((
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
У вас вообще отсуствует указание о соглашении вызова, поэтому берется соглашение по умолчанию из настроек проекта. Не факт, что это __stdcall. Хотя поправка: WINAPI уже определен как __stdcall, так что должно работать. Может WINAPI где то переопределили? И где у вас параметр размером более 64К (о чем говорится по приведенной вами ссылке)? |
|||
|
||||
| nic1986 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.7.2009 Репутация: 1 Всего: 1 |
WINAPI и есть по умолчанию у студии, как __stdcall.Факт в том что вышеупомянутая ошибка появляется когда в настройках проекта стоит RTCs, когда RTCu то все ОК. Возможно какая то цртшная заглушка на точке входе загаживает стек, или еще какое то непотребство творит.
|
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Странно это. В студии конечно баги есть, но это уж очень большой баг, прямо дыра я бы сказал
Собрал ваш пример в VS2012. Получил warning на строке с typedef:
Отсюда следует, что модификатор __stdcall (который в WINAPI) оно проигнорировало. Так что слом с RTCs вполне предсказуем. Поменял typedef на
warning исчез Запустил под дебагером c .RTCs - первый вариант сломался, второй нет. Так что ошибки лучше начинать искать со своей стороны, а не со стороны компилятора и IDE |
||||
|
|||||
| nic1986 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.7.2009 Репутация: 1 Всего: 1 |
Не понял, что на что вы поменяли.
в релизе крашиться, судя по оллидебаг на RETN ф-ции точки входа,т.е. при срабатывание црт заглушки. Это сообщение отредактировал(а) nic1986 - 3.7.2015, 19:59 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
||||
|
||||
| nic1986 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.7.2009 Репутация: 1 Всего: 1 |
В мелких деталях вся суть, а так сразу и не заметишь
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Мне вот интересно, звездочка перед __stdcall, что означала для компилятора? Он ее проигнорировал что ли?
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| GremlinProg |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
он ___stdcall после нее проигнорировал, т.к. обнаружил анахронизм:
Возможно, раньше можно было так писать Добавлено через 3 минуты и 54 секунды у меня, кстати, тоже первая мысль была, что это какая-то старая,доступная форма записи, из серии:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||
|
|||||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |