Робота з COM,OLE, регулярними виразами

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

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

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

Рік:
2011
Тип роботи:
Лабораторна робота
Предмет:
Інші

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра АСУ Лабораторна робота №8 Робота з COM,OLE, регулярними виразами. Написав: ст. гр.. КН-22 Прийняв: Скрибайло-Леськів Д.Ю Львів 2011 Тема: Робота з COM,OLE, регулярними виразами. Мета: Навчитися використовувати у власних програмах стандартні COM-об’єкти. Опанувати навики роботи з регулярними виразами. Теоретичні положення: COM (англ. Component Object Model - об'єктна модель компонентів, вимовляється як [ком]) - це технологічний стандарт від компанії Microsoft, призначений для створення програмного забезпечення на основі взаємодіючих розподілених компонентів, кожен з яких може використовуватися в багатьох програмах одночасно. Стандарт втілює в собі ідеї поліморфізму та інкапсуляції об'єктно-орієнтованого програмування. Стандарт COM міг би бути універсальним і платформо-незалежним, але закріпився в основному на операційних системах сімейства Microsoft Windows. У сучасних версіях Windows COM використовується дуже широко. На основі COM були реалізовані технології: Microsoft OLE Automation, ActiveX, DCOM, COM +, DirectX, а також XPCOM. Принципи роботи COM Основним поняттям, яким оперує технологія COM, є COM-компонент. Програми, побудовані на технології COM, фактично не є автономними програмами, а представляють собою набір взаємодіючих між собою COM-компонентів. Кожен компонент має унікальний ідентифікатор (GUID) і може одночасно використовуватися багатьма програмами. Компонент взаємодіє з іншими програмами через COM-інтерфейси - набори абстрактних функцій і властивостей. Кожен COM-компонент має, як мінімум, підтримувати стандартний інтерфейс «IUnknown», який надає базові засоби для роботи з компонентом. Інтерфейс «IUnknown» включає в себе три методи: QueryInterface, AddRef, Release. Windows API надає базові функції, що дозволяють використовувати COM-компоненти. Бібліотеки MFC і, особливо, ATL / WTL надають набагато гнучкіші і зручніші засоби для роботи з COM. Бібліотека ATL від Microsoft до цих пір залишається найпопулярнішим засобом створення COM-компонентів. Але, часто, COM-розробка залишається ще досить складною справою, програмістам доводиться вручну виконувати багато рутинних завдань, пов'язаних з COM (особливо це помітно у разі розробки на C + +). Згодом (у технологіях COM + і особливо. NET) Microsoft спробував спростити завдання розробки COM-компонентів. Завдання: Використовуючи інтерфейс VBScript Regular Expressions написати програму з власнім користувацький вікном в якому буде здійснюватися перевірка правильності введення даних, зокрема. Номеру телефону, адресі електронної скриньки, дробового числа. Реалізувати керування Microsoft Agent 2.0 Merlin. Рух, графічні ефекти, читання. Написати корисний ужиток для переглядання графічних зображень. Покрокове переглядання слайд-шоу. Реалізувати програму роботи з Microsoft Excel. Створити 4 стовпчики. Занести 1) кут 2)sin 3)cos 4)tag Реалізувати програму роботи з Microsoft Word. Написати програму для автоматичного створення договору оренди квартири. Реалізувати програму роботи з Microsoft Excel. Відкрити документ, та на основі таблиці, у документі, намалювати графік. Реалізувати програму роботи з Microsoft Word Використовуючи інтерфейс VBScript Regular Expressions визначити та вивести у вікні програми, не кириличні слова з відкритого документу. Використовуючи інтерфейс VBScript Regular Expressions написати програму для заміні слів у текстовому документі на основі регулярного виразу. Використовуючи інтерфейс VBScript Regular Expressions написати програму для заміні слів у документі Microsoft Word на основі регулярного виразу. Реалізувати керування Microsoft Agent 2.0 Merlin. Рух, «натискання на іконки робочого столу» Реалізувати програму роботи з Microsoft Excel. З текстового файлу, в якому міститься список студентів, та оцінки по предметам, створити табличку у Excel і визначити середній бал кожного студента. Використовуючи інтерфейс регулярних виразів написати програму для витягування посилань на графічні документи. Фільтр посилань прописувати в ручну. Код програми: Asm-файл .386 .model flat, stdcall ;32 bit memory model option casemap :none ;case sensitive include Lab_7_1.inc .code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke InitCommonControls invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL invoke ExitProcess,0 ;######################################################################## DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM mov eax,uMsg .if eax==WM_INITDIALOG invoke CreateInterface invoke RegExp_Method, FLAG_GLOBAL, SETFLAG invoke RegExp_Method, FLAG_IGNORECASE, SETFLAG .elseif eax==WM_COMMAND .if wParam==1008 ;Count mov ok,1 invoke GetDlgItemText,hWin,1005,addr buff,256 cmp buff,0 jnz er01 mov ok,0 invoke SetDlgItemText,hWin,1005,addr Error01 jmp l1 er01: invoke RegExp_Pattern, offset Expression1, offset ResBuffer, 512 invoke RegExp_Replace, offset buff, offset DataBuffer, 512, \ offset rVar, offset ResBuffer, 512 invoke lstrcmp,addr ResBuffer,addr rVar cmp eax,0 jz l1 invoke SetDlgItemText,hWin,1005,addr Error1 mov ok,0 l1: mov buff,0 invoke GetDlgItemText,hWin,1006,addr buff,256 cmp buff,0 jnz er02 mov ok,0 invoke SetDlgItemText,hWin,1006,addr Error02 jmp l2 er02: invoke RegExp_Pattern, offset Expression2, offset ResBuffer, 512 invoke RegExp_Replace, offset buff, offset DataBuffer, 512, \ offset rVar, offset ResBuffer, 512 invoke lstrcmp,addr ResBuffer,addr rVar cmp eax,0 jz l2 invoke SetDlgItemText,hWin,1006,addr Error2 mov ok,0 l2: mov buff,0 invoke GetDlgItemText,hWin,1007,addr buff,256 cmp buff,0 jnz er03 mov ok,0 invoke SetDlgItemText,hWin,1007,addr Error03 jmp l3 er03: invoke RegExp_Pattern, offset Expression3, offset ResBuffer, 512 invoke RegExp_Replace, offset buff, offset DataBuffer, 512, \ offset rVar, offset ResBuffer, 512 invoke lstrcmp,addr ResBuffer,addr rVar cmp eax,0 jz l3 invoke SetDlgItemText,hWin,1007,addr Error3 mov ok,0 l3: cmp ok ,0 jz m1 invoke MessageBox,0,addr Title1,addr Cap1,MB_OK m1: .elseif wParam==1009 ;Exit jmp exit .endif .elseif eax==WM_CLOSE exit: invoke ReleaseInterface invoke EndDialog,hWin,0 .else mov eax,FALSE ret .endif mov eax,TRUE ret DlgProc endp end start Inc-файл include windows.inc include kernel32.inc include user32.inc include Comctl32.inc include shell32.inc include ole32.inc include oleaut32.inc include Comctl32.inc includelib Comctl32.lib includelib ole32.lib includelib kernel32.lib includelib oleaut32.lib includelib kernel32.lib includelib user32.lib includelib Comctl32.lib includelib shell32.lib DlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM CreateInterface proto ReleaseInterface proto AddRef proto RegExp_Method proto :DWORD,:DWORD RegExp_Pattern proto :DWORD,:DWORD,:DWORD RegExp_Test proto :DWORD,:DWORD,:DWORD RegExp_Replace proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD _MULTI_QI struct pIID dd ? pItf dd ? hr dd ? _MULTI_QI ends .const IDD_DIALOG1 equ 101 IDC_EDIT1 equ 1000 IDC_EDIT2 equ 1001 IDB_ProgID equ 1002 IDB_CLSID equ 1003 FLAG_GLOBAL equ 30h ;RegExp.Global FLAG_IGNORECASE equ 28h ;RegExp.IgnoreCase FLAG_MULTILINE equ 38h ;RegExp.MultiLine CLRFLAG equ 0 SETFLAG equ -1 .data ok db 1 Cap1 db "Перевірку завершено",0 Title1 db "Всі дані введені правильні",0 Error01 db "Введіть номер",0 Error02 db "Введіть е-mail",0 Error03 db "Введіть число",0 Error1 db "Невірний номер",0 Error2 db "Недійсний e-mail",0 Error3 db "Невірно записано",0 rVar db "Підходить",0 Replace db "Замінено",0 Expression1 db "^(\+?\d+)?\s*(\(\d+\))?[\s-]*([\d-]*)$",0;"^[0-9]{2}0[0-9]{9}$",0 Expression2 db "^([a-z0-9]+)(\.[a-z0-9]+)*@([a-z0-9]+)(\.[a-z0-9]+)+$",0;"^[A-F0-9a-f]@[a-f].[a-f]$",0 Expression3 db "^(\d){1,8}\.(\d){1,8}",0 DlgName db "MyDialog",0 App db "ProgID_CLSID",0 ms1 db "Enter CLSID here",0 ms2 db "Enter ProgID here",0 ms3 db "There is no ProgID for this CLSID",0 ms4 db "There is no CLSID for this ProgID",0 Err1 db "The wrong CLSID",0 ;VBScript.RegExp GUID_RegExp db 0A4h, 0ACh, 04Dh, 03Fh, 00Dh, 016h, 0D2h, 011h, \ 0A8h, 0E9h, 000h, 010h, 04Bh, 036h, 05Ch, 09Fh ;IUnknown GUID_I db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, \ 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h .data? ResBuffer db 512 dup(?) DataBuffer db 512 dup(?) buf1 db 512 dup(?) Exp1U dw 256 dup(?) Exp2U dw 256 dup(?) Exp3U dw 256 dup(?) buff db 256 dup(?) hEdit1 DWORD ? hEdit2 DWORD ? buf db 256 dup(?) wbuf db 512 dup(?) cls db 16 dup(?) bufaddr DWORD ? hInstance dd ? .code ;Set RegExp = New RegExp(GUID_RegExp, *_MULTI_QI) CreateInterface proc invoke CoInitialize,0 push offset GUID_I pop IUnknown.pIID invoke CoCreateInstanceEx, offset GUID_RegExp, 0, 5, 0, 1, offset IUnknown ret CreateInterface endp ;RegExp.Release(Interface) ReleaseInterface proc uses ecx mov eax,IUnknown.pItf push eax mov ecx,[eax] call dword ptr[ecx+8] invoke CoUninitialize ret ReleaseInterface endp ;RegExp.Addref(Interface) AddRef proc uses esi mov esi,IUnknown.pItf push esi mov eax,[esi] call dword ptr[eax+4] ret AddRef endp ;RegExp.Method = Bool RegExp_Method proc Method:DWORD,Bool:DWORD mov eax,IUnknown.pItf push Bool push eax mov ecx,[eax] mov edx,Method call dword ptr[ecx+edx] ret RegExp_Method endp ;RegExp.Pattern = Expression RegExp_Pattern proc Expression:DWORD,lpWideCharStr:DWORD,cchWideChar:DWORD local pBSTR:DWORD invoke lstrlen, Expression invoke MultiByteToWideChar, CP_ACP, 0, Expression, eax, lpWideCharStr, cchWideChar invoke SysAllocStringLen, lpWideCharStr, eax mov pBSTR,eax push eax mov eax,IUnknown.pItf push eax mov ecx,[eax] call dword ptr[ecx+20h] invoke SysFreeString, pBSTR ret RegExp_Pattern endp ;RegExp.Replace(SourceString, ReplaceVar) RegExp_Replace proc lpData:DWORD,lpWideCharStr:DWORD,cchWideChar:DWORD, \ ReplaceVar:DWORD, ResultLPSTR:DWORD, szResultLPSTR:DWORD local ReplaceStr:DWORD local bReplaceStr:DWORD local szReplaceVar:DWORD local szWReplaceVar:DWORD ;#######Convert ReplaceVar to BSTR string format####### invoke lstrlen,ReplaceVar mov szReplaceVar,eax imul eax,2 inc eax mov szWReplaceVar,eax invoke VirtualAlloc, 0, szWReplaceVar, MEM_COMMIT, PAGE_READWRITE mov ReplaceStr,eax invoke MultiByteToWideChar, CP_ACP, 0, ReplaceVar, szReplaceVar, ReplaceStr, szWReplaceVar invoke SysAllocStringLen, ReplaceStr, eax mov bReplaceStr,eax invoke VirtualFree, ReplaceStr, szWReplaceVar, MEM_DECOMMIT ;####################################################### invoke lstrlen, lpData invoke MultiByteToWideChar, CP_ACP, 0, lpData, eax, lpWideCharStr, cchWideChar invoke SysAllocStringLen, lpWideCharStr, eax push ResultLPSTR push 0 push bReplaceStr push 0 push 8 push eax mov eax,IUnknown.pItf push eax mov ecx,[eax] call dword ptr[ecx+44h] invoke SysFreeString, bReplaceStr mov eax,[ResultLPSTR] mov eax,[eax] invoke WideCharToMultiByte, CP_ACP, 0, eax, -1, ResultLPSTR, szResultLPSTR, 0, 0 ; invoke MessageBox,0,ResultLPSTR,0,MB_OK ret RegExp_Replace endpВисновки: Отримав поняття про COM як технологію, її структуру і основні методи роботи з нею. Освоїв прийоми роботи з COM-інтерфейсами, а також стандартні API функції для роботи з COM. COM є кросплатформенною технологією, яка безумовно надає певні зручності програмісту. Наприклад можливість використання одного і того самого COM-об’єкту в кількох програмах одночасно. Один з основних на мою думку недоліків, є складність технології, а також необхідність реєстрації об’єктів в реєстр робочої машини (ПК).
Антиботан аватар за замовчуванням

31.03.2013 01:03-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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