1 / 1 / 0
Регистрация: 22.01.2017
Сообщений: 16
1

Что это такое?

30.03.2018, 15:31. Показов 1102. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот такое выражение:
C++
1
((void(__cdecl *)(PCHAR, UINT, USHORT, bool))FUNC_CMessages_AddMessageJumpQ)(text, time, flag, bPreviousBrief)
Тут указатель на функцию, это я понимаю(кстати, почему указатель без имени?):
C++
1
((void(__cdecl *)(PCHAR, UINT, USHORT, bool))
Но зачем:
C++
1
FUNC_CMessages_AddMessageJumpQ)(text, time, flag, bPreviousBrief)
Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2018, 15:31
Ответы с готовыми решениями:

Что такое #, include, что это означает
______

Что это такое?
Что значит Node *pv = root, *prev; Это указатель на структуру инициализированный root и указателем...

Что это такое???
virtual void Show(); virtual void Set(); friend ostream& operator<<( ostream & tmp , Medc &...

Что же это такое ?
подскажите что это такое: int (**myint)(); myint = &address; // address это Dll+0x00C060...

8
Заблокирован
30.03.2018, 15:38 2
FUNC_CMessages_AddMessageJumpQ приводим к указателю на функцию. Потом вызываем с параметрами.
1
1 / 1 / 0
Регистрация: 22.01.2017
Сообщений: 16
30.03.2018, 16:40  [ТС] 3
Так она указывает сама на себя, просто чтобы вызватся с параметрами, так?

И ещё вопрос, можно ли описать её как-то так:
C++
1
2
3
4
5
6
7
8
__asm {
    push text
    push time
    push flag
    push bPreviousBrief
    call 0x69F1E0
    retn 8
}
0
Заблокирован
30.03.2018, 17:11 4
Цитата Сообщение от Fire_Angel Посмотреть сообщение
Так она указывает сама на себя, просто чтобы вызватся с параметрами, так?
Не только. Еще cdecl имеет значение.
Цитата Сообщение от Fire_Angel Посмотреть сообщение
__asm { push text push time push flag push bPreviousBrief call 0x69F1E0 retn 8 }
Нет. Почитай calling conventions для cdecl. В частности, порядок передачи аргументов. Еще имеет значение разрядность системы.
1
1 / 1 / 0
Регистрация: 22.01.2017
Сообщений: 16
30.03.2018, 17:19  [ТС] 5
А то что параметры справа налево так передаются, это специфика процессора?
Он всё задом наперед читает (насколько я знаю в памяти это так), и как разрядность на это влияет?
0
Заблокирован
30.03.2018, 17:27 6
Цитата Сообщение от Fire_Angel Посмотреть сообщение
А то что параметры справа налево так передаются, это специфика процессора?
Нет, это calling convention конкретной функции.

Добавлено через 50 секунд
Цитата Сообщение от Fire_Angel Посмотреть сообщение
Он всё задом наперед читает (насколько я знаю в памяти это так), и как разрядность на это влияет?
Разрядность влияет на то, идут первые аргумент в стеке, или в регистрах. И от операционной системы это тоже зависит, потому что регистры разные используются для аргументов.

Добавлено через 2 минуты
Цитата Сообщение от Fire_Angel Посмотреть сообщение
Он всё задом наперед читает
Если под "он" ты имел в виду процессор, то это актуально при работе с числами. Читай про endianness. А так, какой ядрес я укажу в инструкции, такой и прочитает.
1
1 / 1 / 0
Регистрация: 22.01.2017
Сообщений: 16
30.03.2018, 20:45  [ТС] 7
Разрядность влияет на то, идут первые аргумент в стеке, или в регистрах.
А соглашения о вызове, нет? Насколько я знаю при использовании функции __fastcall, первые два параметра размерностью 32 бит, или меньше, будут помещены в регистры ecx и edx, а в стек все другие.
0
Заблокирован
31.03.2018, 09:15 8
Цитата Сообщение от Fire_Angel Посмотреть сообщение
А соглашения о вызове, нет?
Для x64 - нет. Разрядность и система.

Добавлено через 2 минуты
Цитата Сообщение от Fire_Angel Посмотреть сообщение
Насколько я знаю при использовании функции __fastcall, первые два параметра размерностью 32 бит, или меньше, будут помещены в регистры ecx и edx
А зачем это нужно, если первые аргументы в x86_64 приложении и так идут в регистрах? На винде - 4 аргумента, вроде, на линуксе - 6.
0
1 / 1 / 0
Регистрация: 22.01.2017
Сообщений: 16
31.03.2018, 17:42  [ТС] 9
Как-то не логично, зачем тогда нужен __fastcall, если параметры и так будут передаваться через регистры? Выходит что это бесполезное соглашение о вызове?
0
31.03.2018, 17:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2018, 17:42
Помогаю со студенческими работами здесь

Что это такое?
Написал большую программу (курсовая работа), после многочисленных правок закончились красные...

Кто-нибудь может подробно объяснить, что такое allocators, зачем это и что с ними делать? Нигде не нашёл инфы
Заранее спасибо.

Is up to date что это такое?
Ребята, такой вопрос: откомпилировала программу, убрала ошибки а при запуске пишет is up to date....

WinMain@16 что это такое?
При исполнении программы окно работы программы выдаёт число 4 в шестнадцатеричном формате. Что...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru