Page 49 - 4989
P. 49
якщо в програмі мовою С++ використовується функція із
бібліотеки, написаної мовою С, то така функція оголошується з
специфікатором extern “C”:
extern “C” int someFunction(int x, int y);
Узгодження про виклики мови С аналогічне до
використовуваного С++ у частині передачі/повернення
аргументів та очистки стеку, однак відрізняється способом
утворення імен експортованих функцій.
Для узгодження про виклики мови С++ застосовується
специфікатор __cdecl (всі функції, визначені в програмі на С++,
мають цей специфікатор по замовчуванню, тому його можна не
вказувати).
Для узгодження про виклики Windows API в C++
застосовується специфікатор __stdcall (визначений у стандарті
С++) або WINAPI (визначений у заголовочних файлах Windows).
Для узгодження про виклики, в якому передача параметрів
відбувається через регістри або регістри і стек, у С++
застосовується специфікатор __fastcall.
5.4 Порядок виконання роботи
1. Відкрити проект, створений у лабораторній роботі №4.
2. Зробити оголошення масиву глобальним (винести його за
межі функції main).
3. Оформити код обробки масиву як функцію з двома
аргументами (початкова адреса масиву та кількість
елементів) та цілочисленим типом повернення. Наприклад,
оголошення функції може виглядати так:
int processArray(int* array, int N);
Для варіантів, де задачею є підрахунок кількості значень –
повернути результат підрахунку. Для решти варіантів
повернути кількість оброблених елементів. Викликати цю
функцію з головної функції.
4. Для дослідження узгодження про виклики stdcall
пропонується використати функцію Windows API
MessageBox. Приклад виклику цієї функції:
int rc = MessageBox(NULL, "Text", "Caption", MB_OKCANCEL);
49