979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|||||||||||
1 | |||||||||||
Чем отличается функция с __stdcall и без10.07.2015, 16:20. Показов 6614. Ответов 17
Метки нет (Все метки)
Что такое __stdcall? Прочитал на msdn ниче не ясно, чем отличается функция с __stdcall и без. Вот например код:
И еще в макросе заметил что он тоже добавляет эту штуку, от в этом макросе IMPLEMENT_DYNCREATE(CSpaceship,CCmdTarget) Создается функция которая возвращает указатель на объект CSpaceship, вроде ее определение создается вида:
0
|
10.07.2015, 16:20 | |
Ответы с готовыми решениями:
17
Чем внешняя функция отличается от дружественной кроме как синтаксисом? Чем отличается if от (?:) Чем отличается this от *this? Чем new отличается от malloc? |
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,286
|
|
10.07.2015, 16:24 | 2 |
1
|
10.07.2015, 17:12 | 3 |
На всякий случай: Реализация __stdcall, __cdecl
1
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
10.07.2015, 18:20 [ТС] | 4 |
Evg, DrOffset, Короче я так понял это типо для оптимизации используется и все. Можно за них не парится, типо низкоуровневая фигня на которую не стоит заморачиватся да?
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,286
|
|
10.07.2015, 18:21 | 6 |
Зависит от того зачем ты спрашивал.
Париться или нет - тебе решать. Мы свечку держать не сможем
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
10.07.2015, 18:38 [ТС] | 7 |
ну можно и не заморачиватся?
Я так понял это не важно для разработки, это как бы конечный этап типо оптимизации, когда уже все будет готово, потом уже можно над этим позаморачиватся если нужно будет Добавлено через 1 минуту Та просто ради интереса! Увидел незнакомое определение, в MFC полно всяких незнакомых макросов и всякой фигни еще
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,286
|
|
10.07.2015, 18:40 | 8 |
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||||||
10.07.2015, 18:41 [ТС] | 9 | |||||
__stdcall применяется к WinApi функциям, а мы что можем его и к любым функциям применять? От макрос IMPLEMENT_DYNCREATE(CSpaceship,CCmdTarget) создает левую функцию - не винапи с __stdcall
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,286
|
|
10.07.2015, 18:50 | 10 |
Можем.
Например, мы пользуемся WinAPI, например, есть некая API функция, которая принимает callback. И этот callback она ждет в соответствии с stdcall. Тогда функцию, которую мы делаем callback'ом, нужно обозначить как __stdcall, чтобы ее вызов внутри API функции был корректным. Добавлено через 2 минуты ninja2, классический пример - оконная процедура. Макрос CALLBACK - как раз разворачивается в __stdcall.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
|
|
10.07.2015, 18:58 | 11 |
а еще когда дергаешь функции из dll
несоблюдение соглашений есть путь к краху программы в каком порядке передаются аргументы? несоблюдение приведет или к краху или к неправильному вычислению кто будет чистить стек, вызываемая функция или вызывающая,это точно крах
0
|
|
11.07.2015, 09:36
#12
|
Не по теме: DELDEL
0
|
Ev[G]eN
|
11.07.2015, 09:43
#13
|
Не по теме: -=ЮрА=-, только собрался открывать картинку, что бы посмотреть, а Вы тут со своим "DELDEL":D
0
|
|
11.07.2015, 09:50
#14
|
0
|
Неэпический
|
|
11.07.2015, 09:55 | 15 |
-=ЮрА=-, ну почему же? Если показаны различия между разными соглашениями вызова, то вопрос ТС
Ну и хорошие статьи/примеры всегда интересно почитать :-) и не только ТС
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
11.07.2015, 14:33 [ТС] | 16 |
Как раз по данной теме "Соглашение вызовов", можно было бы и не удалять, хай бы было
0
|
9 / 9 / 5
Регистрация: 15.11.2011
Сообщений: 115
|
|
13.07.2015, 15:10 | 17 |
Вот у меня тоже возникла проблема, подозреваю что из-за несоответствия соглашений о вызовах. То есть программа работала нормально до того, как в нее был добавлен диалог, в процедуру которого я передаю указатель на мой объект. Вроде нормально вызывается метод объекта, начинает выполняться, а потом на ровном месте (присвоение закрытому члену значения) молча перестает работать. В свойствах конфигурации в "Соглашении о вызовах" выставлено _cdecl(/Gd). Подскажите, в чем дело, и как с этим бороться?
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,286
|
|
13.07.2015, 15:53 | 18 |
0
|
13.07.2015, 15:53 | |
13.07.2015, 15:53 | |
Помогаю со студенческими работами здесь
18
Чем C++ отличается от C++ Builder? Чем отличается С++ от Visual С++? Чем отличается ln , lg, и log ? Чем отличается istringstream от stringstream? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |