Win api module_1.1

19
WinAPI Модуль 1.1

Transcript of Win api module_1.1

Page 1: Win api module_1.1

WinAPIМодуль 1.1

Page 2: Win api module_1.1

2

В даному модулі: Поняття кодування інформації Unicode кодування Функції для роботи з Unicode рядками Функції для конвертування Unicode рядків Програмування Windows додатків. Вступ Поняття багатозадачність і багатопоточність Не залежність від апаратних можливостей

Andriy Gladkyy [email protected]

Page 3: Win api module_1.1

3

Кодування інформаціїОдну і ту ж інформацію, наприклад, відомості про небезпеку можна висловити різними способами:

просто крикнути; залишити застережливий знак (малюнок); за допомогою міміки і жестів; передати сигнал «SOS» за допомогою азбуки Морзе або

використовуючи семафорної і прапорцеої мови.

У кожному з цих способів ми повинні знати правила, за якими можна відобразити інформацію. Такі правила називаються кодом.

Andrey Gladky [email protected]

Page 4: Win api module_1.1

4

Кодування інформації Код - це набір умовних позначень (або сигналів) для запису

(або передачі) деяких заздалегідь визначених понять.

Кодування інформації - це процес формування певного представлення інформації. Перехід від однієї форми подання інформації до іншої, більш зручної для зберігання, передачі або обробки.

Кожен образ при кодуванні поданий окремим знаком.

Знак - це елемент кінцевої множини відмінних один від одного елементів.

Знак разом з його змістом називають символом.

Andrey Gladky [email protected]

Page 5: Win api module_1.1

5

Кодування інформації Набір знаків, в якому визначено їх порядок, називається

алфавітом. Існує безліч алфавітів:

алфавіт кириличних літер {А, Б, В, Г, Д, Е, ...} алфавіт латинських букв {А, В, С, D, Е, F, ...} алфавіт десяткових цифр {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} алфавіт знаків зодіаку {картинки знаків зодіаку} та ін.

Особливо велике значення мають набори, що складаються всього з двох знаків: пара знаків {+, -} пара цифр {0, 1} пара відповідей {так, ні}

Andrey Gladky [email protected]

Page 6: Win api module_1.1

6

Кодування інформації Алфавіт, що складається з двох знаків, називається двійковим

алфавітом. Двійковий знак (англ. Binary digit) отримав назву «біт».

Довжиною коду називається така кількість знаків, що використовується при кодуванні.

В обчислювальній техніці в даний час широко використовується двійкове кодування з алфавітом (0, 1).

Найбільш поширеними кодами є ASCII (American standart code for information interchange - американський стандартний код для обміну інформацією) і КОІ-8 (код обміну інформацією довжиною 8 біт).

Andrey Gladky [email protected]

Page 7: Win api module_1.1

7

Кодування інформаціїКод Символ Код Символ Код Символ Код Символ

00100000 пробіл 00110000 0 01000000 @ 01010000 P

00100001 ! 00110001 1 01000001 A 01010001 Q

00100010 " 00110010 2 01000010 B 01010010 R

00100011 # 00110011 3 01000011 C 01010011 S

00100100 $ 00110100 4 01000100 D 01010100 T

00100101 % 00110101 5 01000101 E 01010101 U

00100110 & 00110110 6 01000110 F 01010110 V

00100111 ' 00110111 7 01000111 G 01010111 W

00101000 ( 00111000 8 01001000 H 01011000 X

Andrey Gladky [email protected]

Page 8: Win api module_1.1

8

Кодування інформації

Andrey Gladky [email protected]

Код Символ Код Символ Код Символ Код Символ00101001 ) 00111001 9 01001001 I 01011001 Y

00101010 * 00111010 : 01001010 J 01011010 Z

00101011 + 00111011 ; 01001011 K 01011011 [

00101100 , 00111100 < 01001100 L 01011100 \

00101101 - 00111101 = 01001101 M 01011101 ]

00101110 . 00111110 > 01001110 N 01011110 /\

00101111 / 00111111 ? 01001111 O 11100000

Page 9: Win api module_1.1

9

Unicode кодування В Unicode для кодування символів надається 32 біт (4 байти за

вирахуванням одного біта). Кількість можливих комбінацій дає позамежне число: 2^32 = 2147483684 (тобто більше двох мільярдів).

Тому Unicode описує алфавіти всіх відомих мов, навіть «мертвих» і вигаданих, включає багато математичні та інші спеціальні символи.

Однак інформаційна ємність 32-бітового Unicode все одно залишається дуже великою. Тому частіше використовується скорочена 16-бітова версія (2^16 = 65 536 значень), де кодуються всі сучасні алфавіти.

В Unicode перші 128 кодів співпадають з таблицею ASCII.

Andrey Gladky [email protected]

Page 10: Win api module_1.1

10

Unicode кодування В Unicode є кілька способів кодування одного і того ж

символу. Наприклад, буква «Г» може бути представлена двома байтами в одному кодуванні і чотирма байтами в інший.

Форми кодування які можуть використовуватися з Unicode називаються UTF-8, UTF-16, і UTF-32.

Andrey Gladky [email protected]

Page 11: Win api module_1.1

11

Unicode кодування UTF-8 використовує 1 байт для представлення символів в

наборі ASCII, два байта для символів у кілька алфавітних блоку, і три байти для решти BMP (базова багатомовна площина). Додаткові символи використовують 4 байта.

UTF-16 використовує 2 байти для будь-якого символу в BMP, і 4 байта для додаткових символів.

UTF-32 використовує 4 байти для всіх символів.

Andrey Gladky [email protected]

Page 12: Win api module_1.1

12

Unicode кодування У наступній таблиці, в першому рядку чисел представлена

позиція символу в кодуванні Unicode. Інші рядки показують значення байтів, використовуваних для представлення цього символу в певній кодуванні символів.

Andrey Gladky [email protected]

Page 13: Win api module_1.1

13

Функції для роботи з Unicode рядками LPCSTR - покажчик на константний рядок, що закінчується нуль-

термінатором. Від фрази long pointer constant string. LPCTSTR - покажчик на константний рядок, без UNICODE. Від

фрази long pointer constant TCHAR string. Це надбудова функції LPCSTR.

LPCWSTR - покажчик на константний UNICODE рядок. Від фрази фрази long pointer constant wide character string. Це надбудова функції LPCSTR.

LPSTR - покажчик на рядок, що закінчується нуль-термінатором. Від фрази long pointer string.

LPTSTR - покажчик на рядок, без UNICODE. Від фрази long pointer TCHAR string. Це надбудова функції LPSTR.

LPWSTR - покажчик на UNICODE рядок. Від фрази long pointer wide character string. Це надбудова функції LPSTR.

TCHAR - символьний тип - аналог char і wchar_t. Wcslen – кількість символів в Unicode рядку Wcscmp –порівнює два unicode рядки

Andrey Gladky [email protected]

Page 14: Win api module_1.1

14

Функції для конвертування Unicode рядків Функція wcstombs()

#include <stdlib.h>size_t wcstombs (char * out, const wchar_t * in, size_t size);

Функція wcstombs() перетворює масив двобайтових символів, що адресується параметром-покажчиком in, в його мультибайтних еквівалент і поміщає результат в масив, що адресується параметром out. Перетворенню підлягають тільки перші size символів. Процес перетворення припиняється раніше, якщо буде виявлений символ кінця рядка ('0').

Andrey Gladky [email protected]

Page 15: Win api module_1.1

15

Функції для конвертування Unicode рядків Функція mbstowcs()

#include <stdlib.h>size_t mbstowcs (wchar_t * out, const char * in, size_t size);

Функція mbstowcs() перетворює багатобайтовий рядок, що адресується параметром in, у рядок, що складається з двобайтових символів, і поміщає результат в масив, що адресується параметром out. У масиві out буде збережено в пам'яті тільки size байтів.

Andrey Gladky [email protected]

Page 16: Win api module_1.1

16

Функції для конвертування Unicode рядків

Функція MultiByteToWideChar() перетворює рядок із зазначеного кодування (наприклад, 1251) в Unicode.

Функція WideCharToMultiByte() перетворює з Юникода в будь-яку інший тип кодування.

Andrey Gladky [email protected]

Page 17: Win api module_1.1

17

Програмування Windows додатків. Вступ WinAPI - Прикладний програмний інтерфейс (іноді інтерфейс

прикладного програмування) (англ. Application programming interface) - набір готових класів, процедур, функцій, структур і констант, що надаються додатком (бібліотекою, сервісом) для використання у зовнішніх програмних продуктах.

API визначає функціональність, яку надає програма (модуль, бібліотека), при цьому API дозволяє абстрагуватися від того, як саме ця функціональність реалізована.

Програмні компоненти взаємодіють один з одним за допомогою API. При цьому зазвичай компоненти утворюють ієрархію - високорівневі компоненти використовують API низькорівневих компонентів, а ті, в свою чергу, використовують API ще більш низькорівневих компонентів.

Andrey Gladky [email protected]

Page 18: Win api module_1.1

18

Багатозадачність Багатозадачність (multitasking) - це здатність операційної

системи виконувати кілька програм одночасно.

В основі цього принципу лежить використання операційною системою апаратного таймера для виділення відрізків часу (time slices) для кожного з одночасно виконуваних процесів.

Якщо ці відрізки часу достатньо малі, і машина не перевантажена занадто великим числом програм, то користувачеві здається, що всі ці програми виконуються паралельно.

Andrey Gladky [email protected]

Page 19: Win api module_1.1

19

Багатопоточність Багатопоточність - це можливість програми самій бути

багатозадачного.

Програма може бути розділена на окремі потоки виконання (threads), які, як здається, виконуються паралельно. На перший погляд ця концепція може здатися чи корисною, але виявляється, що програми можуть використовувати багатопоточність для виконання протяжних в часі операцій у фоновому режимі, не змушуючи користувача надовго відриватися від машини.

Andrey Gladky [email protected]