Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/40: Рейтинг темы: голосов - 40, средняя оценка - 4.63
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041

Чем отличается функция с __stdcall и без

10.07.2015, 16:20. Показов 7863. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что такое __stdcall? Прочитал на msdn ниче не ясно, чем отличается функция с __stdcall и без. Вот например код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using std::cout;
 
//создадим свой макрос
int __stdcall f1(int k){return k*k;}
int f2(int k){return k*k;}
 
int main()
{
 
    cout <<"start\r\n";
 
    cout <<"f1()= "<<f1(10)<<"\r\n";
    cout <<"f2()= "<<f2(10)<<"\r\n";
 
    return 0;
}
Одинаково выводит.

И еще в макросе заметил что он тоже добавляет эту штуку, от в этом макросе IMPLEMENT_DYNCREATE(CSpaceship,CCmdTarge t)

Создается функция которая возвращает указатель на объект CSpaceship, вроде ее определение создается вида:
C++
1
2
CObject* PASCAL CSpaceship::CreateObject() 
        { return new CSpaceship; }
макрос PASCAL - это __stdcall.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2015, 16:20
Ответы с готовыми решениями:

Чем внешняя функция отличается от дружественной кроме как синтаксисом?
Внешняя class CBox { public: double m_Length; double m_Width; ...

Чем отличается if от (?:)
Здравствуйте. Почитываю С++, сам программирую в Делфи. Вот немного запутался. В делфи есть условный оператор if, тогда как в С++ есть такой...

Чем отличается this от *this?
Привет всем ! вот код template&lt;typename Key, typename Value&gt; Dictionary&lt;Key, Value&gt;&amp; Dictionary&lt;Key, Value&gt;::operator =(const...

17
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
10.07.2015, 16:24
ninja2, https://ru.wikipedia.org/wiki/... 0%B2%D0%B5
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.07.2015, 17:12
На всякий случай: Реализация __stdcall, __cdecl
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
10.07.2015, 18:20  [ТС]
Evg, DrOffset, Короче я так понял это типо для оптимизации используется и все. Можно за них не парится, типо низкоуровневая фигня на которую не стоит заморачиватся да?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.07.2015, 18:21
Если вопрос стоит о том, нужно ли для своих программ использовать __stdcall, то ответ "да"
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
10.07.2015, 18:21
Цитата Сообщение от ninja2 Посмотреть сообщение
Можно за них не парится, типо низкоуровневая фигня на которую не стоит заморачиватся да?
Зависит от того зачем ты спрашивал.
Париться или нет - тебе решать. Мы свечку держать не сможем
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
10.07.2015, 18:38  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Если вопрос стоит о том, нужно ли для своих программ использовать __stdcall, то ответ "да"
ну можно и не заморачиватся?
Соглашение __stdcall используется для вызова функций API Win32.
Оно ж для API Win32 используется.
Я так понял это не важно для разработки, это как бы конечный этап типо оптимизации, когда уже все будет готово, потом уже можно над этим позаморачиватся если нужно будет

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
Зависит от того зачем ты спрашивал.
Та просто ради интереса! Увидел незнакомое определение, в MFC полно всяких незнакомых макросов и всякой фигни еще
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
10.07.2015, 18:40
Цитата Сообщение от ninja2 Посмотреть сообщение
Та просто ради интереса!
Тогда не заморачивайся.
Вернешься к этому, как оно само в дверь постучит
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
10.07.2015, 18:41  [ТС]
__stdcall применяется к WinApi функциям, а мы что можем его и к любым функциям применять? От макрос IMPLEMENT_DYNCREATE(CSpaceship,CCmdTarge t) создает левую функцию - не винапи с __stdcall
C++
1
2
CObject* PASCAL CSpaceship::CreateObject() 
        { return new CSpaceship; }
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
10.07.2015, 18:50
Цитата Сообщение от ninja2 Посмотреть сообщение
а мы что можем его и к любым функциям применять?
Можем.
Например, мы пользуемся WinAPI, например, есть некая API функция, которая принимает callback. И этот callback она ждет в соответствии с stdcall. Тогда функцию, которую мы делаем callback'ом, нужно обозначить как __stdcall, чтобы ее вызов внутри API функции был корректным.

Добавлено через 2 минуты
ninja2, классический пример - оконная процедура. Макрос CALLBACK - как раз разворачивается в __stdcall.
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
10.07.2015, 18:58
а еще когда дергаешь функции из dll
несоблюдение соглашений есть путь к краху программы
в каком порядке передаются аргументы? несоблюдение приведет или к краху или к неправильному вычислению
кто будет чистить стек, вызываемая функция или вызывающая,это точно крах
0
11.07.2015, 09:36

Не по теме:

DELDEL

0
11.07.2015, 09:43

Не по теме:

-=ЮрА=-, только собрался открывать картинку, что бы посмотреть, а Вы тут со своим "DELDEL":D

0
11.07.2015, 09:50

Не по теме:

Цитата Сообщение от Ev[G]eN Посмотреть сообщение
-=ЮрА=-, только собрался открывать картинку, что бы посмотреть, а Вы тут со своим "DELDEL"
- не тот call вставил, хотел показать отличие в работе программы при отличии в порядке помещения аргументов, но это чуть не по данной теме. Поэтому и вытер

0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
11.07.2015, 09:55
-=ЮрА=-, ну почему же? Если показаны различия между разными соглашениями вызова, то вопрос ТС
ну можно и не заморачиватся?
отпадет сам собой :-)

Ну и хорошие статьи/примеры всегда интересно почитать :-) и не только ТС
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
11.07.2015, 14:33  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- не тот call вставил, хотел показать отличие в работе программы при отличии в порядке помещения аргументов, но это чуть не по данной теме. Поэтому и вытер
Как раз по данной теме "Соглашение вызовов", можно было бы и не удалять, хай бы было
0
9 / 9 / 5
Регистрация: 15.11.2011
Сообщений: 115
13.07.2015, 15:10
Цитата Сообщение от DrOffset Посмотреть сообщение
Например, мы пользуемся WinAPI, например, есть некая API функция, которая принимает callback. И этот callback она ждет в соответствии с stdcall. Тогда функцию, которую мы делаем callback'ом, нужно обозначить как __stdcall, чтобы ее вызов внутри API функции был корректным.

ninja2, классический пример - оконная процедура. Макрос CALLBACK - как раз разворачивается в __stdcall.
Вот у меня тоже возникла проблема, подозреваю что из-за несоответствия соглашений о вызовах. То есть программа работала нормально до того, как в нее был добавлен диалог, в процедуру которого я передаю указатель на мой объект. Вроде нормально вызывается метод объекта, начинает выполняться, а потом на ровном месте (присвоение закрытому члену значения) молча перестает работать. В свойствах конфигурации в "Соглашении о вызовах" выставлено _cdecl(/Gd). Подскажите, в чем дело, и как с этим бороться?
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
13.07.2015, 15:53
Цитата Сообщение от VIKT0R Посмотреть сообщение
Подскажите, в чем дело, и как с этим бороться?
Нужно код смотреть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.07.2015, 15:53
Помогаю со студенческими работами здесь

Чем new отличается от malloc?
Чем new отличается от malloc?

Чем C++ отличается от C++ Builder?
Чем C++ отличается от C++ Builder? И если имеется желание писать именно в C++, а не в билдере, то что для этого ещё надо освоить и каким...

Чем отличается С++ от Visual С++?
Здравствуете товарищи программисты! Только начал изучать язык программирования С++ и возникло пару вопросов. Чем отличается С++ от Visual...

Чем отличается ln , lg, и log ?
и как реализуются эти функцию в c++

Чем отличается istringstream от stringstream?
можете объяснить работу каждого оператора?


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru