stdcall and winapi

Тема в разделе "LANGS.C", создана пользователем nanoo, 18 ноя 2011.

  1. nanoo

    nanoo New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2010
    Сообщения:
    23
    Всем привет!

    Такой вопрос: http://msdn.microsoft.com/en-us/library/zxk0tw93%28v=vs.71%29.aspx здесь написано, что для всех winapi функций используется stdcall, но в peinfo user32.dll выглядит так, как будто там всё cdecl (нет @ и количества освобождаемых байтиков). Тоже самое наблюдается с кучей системных библиотек из папки system32 включая kernel32.dll и ntdll.dll. Думал раньше, что это из-за 64 битной версии. Но посмотрел на 32 битной - там то же самое - декораторов нет.
    Может я чего-то не понимаю? Объясните пожалуйста этот пункт.

    И ещё одни вопрос: допустим я делаю dll. Какой call convention мне использовать stdcall или cdecl? Как принято его выбирать?

    Спасибо.
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.321
    для большинства WinAPI используется stdcall для 32-битный операционных систем и fastcall для 64-битных операционных систем... кроме тех функций, которые призваны "повторять" posix стандарт, они в большинстве своем cdecl... имя экспортируемой в dll функции может и не иметь никаких декораторов, это задается в def-файле при сборке библиотеки и в соответствующем этой библиотеки lib-файле...

    какой тебе удобнее, такой и используй...
     
  3. nanoo

    nanoo New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2010
    Сообщения:
    23
    Спасибо! Это значительно прояснило ситуацию!