Звіт

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра автоматизованих систем управління

Інформація про роботу

Рік:
2010
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи
Група:
КН-21

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України Національний університет “Львівська політехніка” Кафедра автоматизованих систем управління  Звіт з предмету “Системне програмування і операційні системи” з лабораторної роботи №8 Підготував: студент групи КН-21 Максимовський Андрій Перевірила: Павлюк О.М. Львів - 2010 Лабораторна робота №8 Тема – Використання технології OLE Мета – Зрозуміти принципи виклику функцій OLE на асемблері. Теоретичні відомості ExitProcess завершує процес і всі його потоки. VOID ExitProcess UINT uExitCode / / код виходу для всіх потоків Функція MessageBox створює, відображає і управляє вікні повідомлення. Вікно повідомлень містить додаток певних повідомлень і назви, а також будь-яку комбінацію зумовлених іконок і натискати кнопки. Int MessageBox HWnd HWND, / / дескриптор вікна власника LPCTSTR lpText, / / адреса тексту у вікні повідомлення LPCTSTR lpCaption, / / адреса Тема повідомлення вікна UINT uType / / Стиль вікна повідомлення GlobalAlloc розміщує вказане число байтів від купи. У лінійному Win32 оточенні програмного ІНТЕРФЕЙСУ додатка, є жодна різниця між місцевою купою і глобальною купою. HGLOBAL GlobalAlloc UINT uFlags // властивості розміщення об'єкту DWORD dwBytes // число байтів до асигнування GlobalLock замикає об'єкт глобальної пам'яті і повертає покажчик першому байту блоку пам'яті об'єкту. Блок пам'яті зв'язався із замкнутим об'єктом пам'яті не може бути переміщений або відкинутий. Для об'єктів пам'яті, розміщених з прапором GMEM_MOVEABLE, функція збільшує замкового графа, що асоціюється з об'єктом пам'яті. LPVOID GlobalLock( HGLOBAL hMem // адреса об'єкту глобальної пам'яті GlobalUnlock зменшує замкового графа, що асоціюється з об'єктом пам'яті, який був розміщений з прапором GMEM_MOVEABLE. Ця функція має жоден ефект на об'єктах пам'яті, розміщених з прапором GMEM_FIXED. BOOL GlobalUnlock( HGLOBAL hMem // ручка до об'єкту глобальної пам'яті GetDeviceCaps відновлює специфічну для пристрою інформацію про вказаний пристрій. int GetDeviceCaps( HDC hdc // контекстна для пристрою ручка int nIndex // індекс властивості поставити під сумнів GetClientRect відновлює координати client зони вікна. Client координати конкретизують верхні ліві і нижні праві кути client області. Оскільки client координати відносні до верхнього лівого кута client зони вікна, координати верхнього лівого кута є (0,0). BOOL GetClientRect( HWND hWnd // ручка вікна LPRECT lpRect // адреса структури для client координат ReadFile читає дані з файлу, починаючись при положенні, вказаному by покажчик файлу. Після того, як операція читання даних була завершена, покажчик файлу скоректований by число байтів фактично читання, якби тільки ручка файлу створювалася з частково покритою властивістю. Якщо ручка файлу створюється для частково покритого входу і output (I/O), додаток повинен регулювати позицію покажчика файлу після операції читання даних. BOOL ReadFile( УПРАВЛЯЙТЕ hFile // ручка файлу для читання LPVOID lpBuffer // адреса буфера, який отримує дані DWORD nNumberOfBytesToRead // число байтів для читання LPDWORD lpNumberOfBytesRead // адреса числа вичитаних байтів LPOVERLAPPED lpOverlapped // адреса структури для даних CreateFile створює або відкриває наступні об'єкти і повертає ручку, яка може бути used, аби звернутися до об'єкту: УПРАВЛЯЙТЕ CreateFile( LPCTSTR lpFileName // покажчик на ім'я файлу DWORD dwDesiredAccess // (запис читання) режим доступ DWORD dwShareMode // метод долі LPSECURITY_ATTRIBUTES lpSecurityAttributes // покажчик на атрибути секретності DWORD dwCreationDistribution //, як створити DWORD dwFlagsAndAttributes // атрибути файлу УПРАВЛЯЙТЕ hTemplateFile // ручка, аби представити з властивостями для копіювання GetFileSize відновлює розмір, в байтах, з вказаного файлу. DWORD GetFileSize( УПРАВЛЯЙТЕ hFile // ручка файлу, аби отримати розмір LPDWORD lpFileSizeHigh // адреса старшого слова для розміру файлу CloseHandle закриває відкриту об'єктну ручку. BOOL CloseHandle( УПРАВЛЯЙТЕ hObject // ручка, аби заперечити для закриття MulDiv умножає два 32-розрядні значення а потім ділить 64-розрядний результат на третє 32-розрядне значення. Повертане значення зігнане або внизу до найближчого цілого числа. int MulDiv( int nNumber // 32-шматок підписав співмножник int nNumerator // 32-шматок підписав множник int nDenominator // 32-шматок підписав дільника GETDC відновлює ручку контексту (DC) пристрою показу для client зони вказаного вікна. Контекст пристрою показу може бути used в подальших функціях GDI, аби тягнути в client зоні вікна. Ця функція відновлює загальний, клас, або приватний контекст пристрою залежно від класового стилю конкретизував для вказаного вікна. Для загальних контекстів пристрою, GETDC призначає стандартні атрибути контексту пристрою кожного разу, коли це відновлено. Для класових і приватних контекстів пристрою, GETDC залишає заздалегідь призначені незмінні властивості. HDC GETDC( HWND hWnd // ручка вікна RELEASEDC випускає контекст (DC) пристрою, звільняючи це для використання by інші застосування. Ефект функції RELEASEDC залежить від вигляду контексту пристрою. Він звільняє лише загальним і контексти пристрою вікна. Це має жоден ефект на класових або приватних контекстах пристрою. int RELEASEDC( HWND hWnd // ручка вікна HDC hDC // ручка контексту пристрою CreateWindowEx створює частково покривають, pop-up, або дитяче вікно з розширеним стилем; інакше, ця функція ідентична функції CreateWindow. Для більш конкретної інформації про створення вікна і для повних описів інших параметрів CreateWindowEx, бачать CreateWindow. HWND CreateWindowEx( DWORD dwExStyle // розширив стиль вікна LPCTSTR lpClassName // покажчик на зареєстроване класове ім'я LPCTSTR lpWindowName // покажчик на ім'я вікна DWORD dwStyle // стиль вікна int x // позиція горизонталі вікна int y // vertical позиція вікна int nWidth // вікно шириною int nHeight // висота вікна HWND hWndParent // ручка до батьківського або owner вікна HMENU hMenu // ручка до меню, або ідентифікатора вікна дитяти HINSTANCE hInstance // ручка до прикладного зразка LPVOID lpParam // покажчик на дані створення вікна GetModuleHandle повертає module ручку для вказаного модуля, якщо файл був mapped в адресному просторі дзвонячого процесу. HMODULE GetModuleHandle( LPCTSTR lpModuleName // адреса module імені, аби повернути ручку SendMessage відправляє вказане повідомлення вікну або вікнам. Звернення до функції процедура вікна для вказаного вікна і не повертається, поки процедура вікна не обробила повідомлення. Функція PostMessage, в контрасті, вивішує повідомлення черги повідомлень нитки і повертається негайно. LRESULT SendMessage( HWND hWnd // ручка вікна призначення Повідомлення UINT // повідомлення для послання WPARAM wParam // перший параметр повідомлення LPARAM lParam // параметр повідомлення помічника GetPixel відновлює червоне, зелене, блакитне (RGB), кольорове значення пікселя у вказаних координатах. COLORREF GetPixel( HDC hdc // ручка контексту пристрою int XPos // x-coordinate пікселя int nYPos // y-coordinate пікселя SetPixel встановлює піксель у вказаних координатах до вказаного кольору. COLORREF SetPixel( HDC hdc // ручка контексту пристрою int X // x-coordinate пікселя int Y // y-coordinate пікселя COLORREF crColor // колір пікселя .586 .model flat,STDCALL extrn GlobalAlloc:Proc extrn GlobalLock:Proc extrn GlobalUnlock:Proc extrn GetDeviceCaps:Proc extrn GetClientRect:Proc extrn ReadFile:Proc extrn CreateFileA:Proc extrn GetFileSize:Proc extrn CloseHandle:Proc extrn MulDiv:Proc extrn GetDC:Proc extrn ReleaseDC:Proc extrn ExitProcess:Proc extrn CreateWindowExA:Proc extrn CreateStreamOnHGlobal:Proc extrn OleLoadPicture:Proc extrn GetModuleHandleA:Proc extrn MessageBoxA:Proc extrn SendMessageA:Proc extrn LoadImageA:Proc extrn GetPixel:proc extrn SetPixel:proc .data HWnd dd 0 HDC dd 0 HMWidth dd 0 Width1 dd 0 HMHeight dd 0 Height dd 0 RECT dd 0,0,0,0 ;left,top,right,bottom RECT1 dd 0,0,0,0 PICTURE_NAME db 'test.jpg',0 buf1 db 'Ôðàãìåíòàö³ÿ ìàëþíêà',0 buf db 'Press OK',0 buf2 db 'Çìåíøåííÿ ðîçì³ðó\Âèëó÷åííÿ çåíåíîãî êîëüîðó',0 HFile dd 0 File_Size dd 0 HGlobal dd 0 NUM_READ dd 0 PSTM dd 0 ;iäåíòèôiêàòîð iíòåðôåéñó IPicture, ÿêèé âçÿòèé ç ðåºñòðó: IID_IPicture dd 7bf80980h ; HKEY_CLASSES_ROOT\Interface\ dw 0bf32h, 101ah ; {7BF80980-BF32-101A-8BBB-00AA00300CAB} db 8bh, 0bbh db 00h, 0aah, 00h, 30h, 0ch, 0abh GPICTURE dd 0 CLASSNAME db 'Static',0 AppHWnd dd 0 hphoto dd 0 eax1 dd 0 lichX dd 0 lichY dd 0 lichX1 dd 0 lichY1 dd 0 tmp_color dd 0 p1 dd 0 Rop db 'SRCAND',0 HDC1 dd 0 .code Start: call CreateFileA, offset PICTURE_NAME, 80000000h,0,0,3,0,0 cmp eax,-1 jz STOP mov HFile,eax call GetFileSize,HFile,0 mov File_Size,eax call GlobalAlloc, 2, File_Size mov HGlobal,eax call GlobalLock,eax call ReadFile, HFile, eax, File_Size, offset NUM_READ,0 call GlobalUnlock, HGlobal call CloseHandle, HFile call CreateStreamOnHGlobal, HGlobal, 1, offset PSTM mov eax,PSTM ; çàâàíòàæèòè ôàéë ó ïîòiê or eax,eax jz STOP call OleLoadPicture,PSTM,File_Size,0,offset IID_IPicture,offset GPICTURE or eax,eax ; ñêîðèñòàòèñü ³íòåðôåéñîì îá'ºêò IPicture jnz STOP mov edx,PSTM ; coinvoke PSTM,IUnknown,Release mov edx,[edx] push PSTM call Dword ptr [edx+8h] mov edx, GPICTURE ; âèêîðèñòàííÿ ìåòîäó OLE mov edx, [edx] ; IPicture::get_Width (18h) push offset HMWidth push GPICTURE call Dword ptr [edx+18h] mov edx, GPICTURE ; âèêîðèñòàííÿ ìåòîäó OLE mov edx, [edx] ; IPicture::get_Height (1Ch) push offset HMHeight push GPICTURE call Dword ptr [edx+1Ch] call GetDC,HWnd mov HDC,eax call GetDeviceCaps, HDC,88 ; LOGPIXELSX call MulDiv, HMWidth,eax,254*8 ;9ECh ; HIMETRIC_INCH mov Width1, eax call GetDeviceCaps, HDC,90 ; LOGPIXELSY call MulDiv, HMHeight,eax,254*8 ;9ECh ; HIMETRIC_INCH mov Height, eax call GetClientRect, HWnd, offset RECT mov edx, GPICTURE ; âèêîðèñòàííÿ ìåòîäó OLE mov edx, [edx] ; IPicture::Render (20h) mov eax, HMHeight mov eax1,eax neg eax call [edx+20h],GPICTURE,HDC,0,0,Width1,Height,0,HMHeight,HMWidth,eax,offset RECT mov lichY1,400 mov lichX1,500 .WHILE (lichY1<554) mov edx, Width1 .WHILE (lichX1<750) call GetPixel,HDC,lichX,lichY mov tmp_color,eax call GetPixel,HDC,lichX1,lichY1 call SetPixel,HDC,lichX,lichY,eax call SetPixel,HDC,lichX1,lichY1,tmp_color inc lichX inc lichX1 .ENDW mov lichX,0 mov lichX1,500 inc lichY inc lichY1 .ENDW call ReleaseDC,AppHWnd,HDC call MessageBoxA,0,offset buf,offset buf1,30h ;----------------------------------------------------------------------------------------- call CreateWindowExA,8h,offset CLASSNAME,0,80000000h or 010000000h or 0Eh or 1000h ,800,250,250,190,0,0,0,0 mov AppHWnd,eax call CreateFileA, offset PICTURE_NAME, 80000000h,0,0,3,0,0 cmp eax,-1 jz STOP mov HFile,eax call GetFileSize,HFile,0 ; îòðèìàòè äîâæèíó ôàéëó mov File_Size,eax call GlobalAlloc, 2, File_Size mov HGlobal,eax call GlobalLock,eax call ReadFile, HFile, eax, File_Size, offset NUM_READ,0 call GlobalUnlock, HGlobal call CloseHandle, HFile mov PSTM,0 call CreateStreamOnHGlobal, HGlobal, 1, offset PSTM mov eax,PSTM ; çàâàíòàæèòè ôàéë ó ïîòiê or eax,eax jz STOP call OleLoadPicture,PSTM,File_Size,0,offset IID_IPicture,offset GPICTURE or eax,eax ; ñêîðèñòàòèñü ³íòåðôåéñîì îá'ºêò IPicture jnz STOP mov edx,PSTM ; coinvoke PSTM,IUnknown,Release mov edx,[edx] push PSTM call dword ptr [edx+8h] mov edx, GPICTURE ; âèêîðèñòàííÿ ìåòîäó OLE mov edx, [edx] ; IPicture::get_Width (18h) push offset HMWidth push GPICTURE call Dword ptr [edx+18h] mov edx, GPICTURE ; âèêîðèñòàííÿ ìåòîäó OLE mov edx, [edx] ; IPicture::get_Height (1Ch) push offset HMHeight push GPICTURE call Dword ptr [edx+1Ch] call GetDC,AppHWnd mov HDC,eax call GetDeviceCaps, HDC,88 ; LOGPIXELSX call MulDiv, HMWidth,eax,6000;9ECh ; HIMETRIC_INCH mov Width1, eax call GetDeviceCaps, HDC,90 ; LOGPIXELSY call MulDiv, HMHeight,eax,6000 ;9ECh ; HIMETRIC_INCH mov Height, eax call GetClientRect, AppHWnd, offset RECT mov edx, GPICTURE ; âèêîðèñòàííÿ ìåòîäó OLE mov edx, [edx] ; IPicture::Render (20h) ; IPicture::Render (20h) mov eax, HMHeight neg eax mov p1,eax call [edx+20h],GPICTURE,HDC,0,0,Width1,Height,0,HMHeight,HMWidth,p1,offset RECT mov lichY,0 mov lichX,0 .WHILE (lichY<188) mov edx, Width1 .WHILE (lichX<248) call GetPixel,HDC,lichX,lichY and eax,0ff00ffh call SetPixel,HDC,lichX,lichY,eax inc lichX .ENDW mov lichX,0 inc lichY .ENDW call ReleaseDC,AppHWnd,HDC call MessageBoxA,0,offset buf2,offset buf,30h STOP: call ExitProcess,0 end Start Висновок: під час лабораторної роботи я навчитися розуміти принципи виклику функцій OLE на асемблері.
Антиботан аватар за замовчуванням

29.11.2012 17:11-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!