Instrukcja laboratoryjna cz.3



Podobne dokumenty
Instrukcja laboratoryjna nr.4

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Delphi podstawy programowania. Środowisko Delphi

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Programowanie obiektowe

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

using System;... using System.Threading;

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

Programowanie obiektowe i zdarzeniowe wykład 1 Wprowadzenie do programowania zdarzeniowego

Programowanie obiektowe

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Wykład 6 Dziedziczenie cd., pliki

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Wykład 5 Okna MDI i SDI, dziedziczenie

C# /.NET. Copyright by 3bird Projects 2018,

Laboratorium 1 - Programowanie proceduralne i obiektowe

Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008.

Wprowadzenie do biblioteki klas C++

Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Programowanie systemów informatycznych laboratorium. Ćw. 3: Akwizycja danych. RS 232 cd.

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Informatyka I : Tworzenie projektu

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

Wykłady 1, 2. Wstęp do programowania w środowisku Visual C++ Autor: Zofia Kruczkiewicz

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Praca w środowisku Visual Studio 2008, Visual C

Instrukcja laboratoryjna nr.2

Zaawansowane aplikacje internetowe - laboratorium

Instrukcja laboratoryjna cz.6

Prosta książka telefoniczna z wykorzystaniem zapisu do pliku

xmlns:prism= c. <ContentControl prism:regionmanager.regionname="mainregion" />

I - Microsoft Visual Studio C++

Visual Studio instalacja

MVVM Light Toolkit. Julita Borkowska

Multimedia JAVA. Historia

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Rozdział 3. Zapisywanie stanu aplikacji w ustawieniach lokalnych

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Programowanie Obiektowe GUI

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Instrukcja laboratoryjna cz.0

Zacznij Tu! Poznaj Microsoft Visual Basic. Michael Halvorson. Przekład: Joanna Zatorska

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Wykład 10 Kolekcje, pliki tekstowe, c.d. Przykład: Notatnik

Laboratorium programowania urządzeń mobilnych

Podstawy programowania. Wprowadzenie

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis

Enterprise JavaBeans (EJB)

Zadania: 1. Funkcja przeliczająca F na C: float FtoC(float f){ return (f 32.0) * 5.0 / 9.0; }

Programowanie obiektowe

Podstawy Programowania Obiektowego

Szybkie tworzenie grafiki w GcIde

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

1. Wprowadzenie do WPF i XAML. Tworzenie interfejsu użytkownika.

Programowanie obiektowe

Języki programowania imperatywnego

Wykład 8: klasy cz. 4

Microsoft Visual C : praktyczne przykłady / Mariusz Owczarek. Gliwice, cop Spis treści

Zaawansowane programowanie w C++ (PCP)

MentorGraphics ModelSim

Aplikacje w środowisku VBA. Visual Basic for Aplications

Podstawowe kontrolki graficzne. Obsługa plików poprzez kontrolki

Platformy Programowania

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Rys. 3. Kod elementów na stronie po dodaniu kontrolek podstawowych.

Informatyka I. dr inż. Andrzej Czerepicki.

Lokalizacja Oprogramowania

Aplikacje w środowisku Java

Informatyka II. Laboratorium Aplikacja okienkowa

Scenariusz lekcji. Scenariusz lekcji 1 TEMAT LEKCJI: 2 CELE LEKCJI: 2.1 Wiadomości: 2.2 Umiejętności: 3 METODY NAUCZANIA: 4 ŚRODKI DYDAKTYCZNE:

Microsoft Foundation Classes

Aplikacje internetowe i rozproszone - laboratorium

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Zaawansowane programowanie w języku C++ Klasy w C++

Instrukcja laboratoryjna

Programowanie Komputerów 2FD. Materiały pomocnicze do laboratorium

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Wprowadzenie do projektu QualitySpy

Wykład 7: Lazarus GUI

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Podstawy Programowania 2

SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski -

Tablice. Jones Stygar na tropie zmiennych

Programowanie obiektowe - 1.

INFORMATYKA MÓJ SPOSÓB NA POZNANIE I OPISANIE ŚWIATA PROGRAM NAUCZANIA INFORMATYKI Z ELEMENTAMI PRZEDMIOTÓW MATEMATYCZNO-PRZYRODNICZYCH

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Instrukcja laboratoryjna cz.3

Kurs programowania 2 - listy

Ćwiczenie laboratoryjne. Oprogramowanie i badanie stosu lub kolejki w środowisku Visual Basic 2005

Programowanie obiektowe

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Programowanie w języku C++ Grażyna Koba

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Programowanie obiektowe

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Transkrypt:

Języki programowania na platformie.net cz.2 2015/16 Instrukcja laboratoryjna cz.3 Język C++/CLI Prowadzący: Tomasz Goluch Wersja: 2.0

I. Utworzenie projektu C++/CLI z interfejsem graficznym WPF 1 Cel: Zapoznanie z możliwością obsługi WPF w projekcie C++/CLI. Domyślne szablony C++/CLI dostępne w Visual Studio nie wspomagają interfejsu graficznego WPF a od wersji 2012 również Windows Forms. Pomimo, że Microsoft promuje implementację GUI WPF z wykorzystaniem VB albo C#, a następnie dołączenie kodu C++/CLI w postaci zewnętrznej biblioteki to nic nie stoi na przeszkodzie abyśmy skorzystali z GUI opisanego językiem XAML bezpośrednio w projekcie C++/CLI. Zdani jesteśmy jednak na implementację interfejsu samemu od początku. W pierwszym kroku należy do naszego projektu (CLR Empty Project Visual C++) dodać referencje do nast. bibliotek: PresentationCore, PresentationFramework, System oraz WindowsBase. Aplikacja WPF to po prostu obiekt klasy dziedziczącej po Application. Uruchomienie wymaga wywołania metody Run do której przekazujemy obiekt Window. W celu utworzenia tego obiektu możemy wykorzystać plik zawierający GUI w języku XAML i metodę XamlReader. Dodajmy nowy plik Main.cpp z nast. kodem (wymagany jest również MainWindow.xaml zawierający przynajmniej element Window): <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="583" Width="600"> </Window> 1 Więcej informacji można znaleźć tutaj: http://www.codeguru.com/cpp/cpp/cpp_managed/general/article.php/c16355/using-wpf-with-managed- C.htm 1

#include <windows.h> using namespace System; using namespace System::Windows; using namespace System::IO; using namespace System::Windows::Markup; using namespace System::Windows::Controls; public ref class MyApplication : public Application public: MyApplication(Window ^win) // add constructor code here ; [STAThread] int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmd, int ncmd) Stream^ st = File::OpenRead("MainWindow.xaml"); Window^ win = (Window^)XamlReader::Load(st, nullptr); Application^ app = gcnew MyApplication(win); app->run(win); Wewnątrz klasy aplikacji umieszczamy referencje obiektów do których dostęp u będziemy potrzebowali: RichTextBox, ListBox, TextBox, Button, Label. public ref class MyApplication : public Application private: Button ^addbtn, ^invokebtn, ^setbtn; private: RichTextBox ^codertb; ( ) Wewnątrz konstruktora klasy aplikacji przypisujemy referencje do żywych obiektów GUI i przypinamy kody obsługi interesujących nas zdarzeń (kliknięcie przycisku oraz zmiana zaznaczonego indeksu w kontrolce ListBox). public: MyApplication(Window ^win) addbtn = (Button^)win->FindName("addButton"); addbtn->click += gcnew RoutedEventHandler(this, &MyApplication::OnAddBtnClick); methodslistbox = (ListBox^)win->FindName("methodsListBox"); methodslistbox->selectionchanged += gcnew System::Windows::Controls::SelectionChangedEventHandler(this, &MyApplication::OnSelectionMethodsListBoxChanged); Metody obsługi zdarzeń umieszczamy wewnątrz klasy aplikacji private: System::Void OnSelectionMethodsListBoxChanged(Object^ sender, SelectionChangedEventArgs^ e) // Add your code here 2

II. Dynamiczna kompilacja kodu źródłowego Cel: Zapoznanie z mechanizmem CodeDOM Code Document Object Model. CodeDOM reprezentowany jest jako drzewo kontenerów, a korzeniem każdej takiej kompilowanej struktury jest CodeCompileUnit. Metoda statyczna CreateProvider klasy CodeDomProvider zwraca instancję kompilatora tej klasy dla konkretnego języka: CodeDomProvider^ prov = CodeDomProvider::CreateProvider("VisualBasic"); Klasa CompilerParameters reprezentuje parametry używane do wywołania kompilatora. CompilerParameters^ param = gcnew CompilerParameters(); Pozwala ustalić czy rezultatem kompilacji ma być program wykonywalny czy biblioteka, jego nazwę, czy mają zostać dołączone informacje dla debbugera, dodać wymagane referencje, ustalić poziom raportowania błędów i wiele innych. Nas interesuje właściwość GenerateInMemory która informuje kompilator aby moduł nie był zapisywany jako. param->generateinmemory = true; Aby skompilować nowy kod VB należy utworzyć reprezentujący go obiekt klasy CodeSnippetCompileUnit. CodeSnippetCompileUnit^ csu = gcnew CodeSnippetCompileUnit(nowy_kod); Do kompilacji modułu opisanego przy pomocy CodeDOM służy metoda CompileAssemblyFromDom obiektu kompilatora. Jako parametry przyjmuje obydwa powyższe poarametry. Obiekt param reprezentujący parametry kompilacji oraz obiekt csu reprezentujący fragment kodu podlegającego kompilacji. CompilerResults^ res = prov->compileassemblyfromdom(param, csu); Otrzymany obiekt klasy CompilerResults reprezentuje wynik kompilacji i pozwala między innymi na przeglądanie kolekcji błędów i ostrzeżeń kompilacji (właściwość Errors) albo na dostęp do skompilowanego assembly (właściwość CompiledAssembly typu Assembly). Do pobrania interesującego nas typu służy metoda GetType("namespace.type") obiektu klasy Assembly. Zwraca ona obiekt typu Type udostepniający między innymi metody GetMethods, GetProperties oraz GetFields zwracające odpowiednio kolekcje obiektów MethodInfo, PropertyInfo i FieldsInfo. Analogicznie do pobrania konkretnej metody, właściwości, itp służą metody GetMethod("nazwa_metody"), GetProperty("nazwa_właściwości"), itp Metodę możemy wywołać przy pomocy metody Invoke obiektu klasy MethodInfo. Przyjmuje ona dwa parametry. Pierwszy to obiekt którego metoda jest wykonywana (ignorowany w przypadku metody statycznej), drugi to tablica parametrów wykonywanej metody (liczba, kolejność i typy parametrów muszą być zgodne z sygnaturą wywoływanej metody). W celu pobrania bądź ustawienia wartości właściwości bądź pola obj służą metody: GetValue(obj) i GetValue(obj). 3

Do powołania instancji danego typu służy statyczna metoda CreateInstance klasy Activator: obj = Activator::CreateInstance(t); III. Zadanie laboratoryjne Cel: Pogłębienie wiedzy na temat C++/CLI i CodeDOM. Napisać program w C++/CLI z interfejsem graficznym WPF kompilujący prosty kod VB. Kod składa się z pojedynczej klasy zawierającej dwie metody i dwie właściwości/pola. Pozwala na wyświetlenie błędów kompilacji (w przypadku nie powodzenia kompilacji) bądź dostępnych metod i właściwości (w przeciwnym przypadku). Pozwala również na uruchomienie zaznaczonej metody i jej wywołanie oraz wyświetlenie wyniku. W przypadku właściwości/pola ustawienie/odczytanie wartości i odczytanie typu. Przykładowe GUI: Do wprowadzania kodu można wykorzystać kontrolkę RichTextBox natomiast błędy, metody i zmienne można wyświetlać w ListBox ie posiada on właściwość SelectedIndex określającą indeks zaznaczonego pola. Pozostałe kontrolki to zwykłe etykiety, przyciski i pola tekstowe. 4