Documente Academic
Documente Profesional
Documente Cultură
Istoricul versiunilor
Versiunea
Anul
Denumire Versiune .NET
lansării
Framework
Visual Studio 4.0 N/A 1995
Visual Studio 97 5.0 N/A 1997
Visual Studio 6.0 6.0 N/A 1998
Visual Studio .NET (2002) 7.0 1.0 2002
Visual Studio .NET 2003 7.1 1.1 2003
Visual Studio 2005 8.0 2.0 2005
Visual Studio 2008 9.0 3.5 2007
Visual Studio 2010 10.0 4.0 2010
Visual Studio 2012 11.0 4.5 2011
Anterior versiunii Visual Studio 4.0 a existat Visual Basic 3, Visual C++, Visual
FoxPro și Source Safe ca și produse independente.
1
Programare Windows I – Visual C++ Curs 1
Visual studio este oferit în mai multe variante: Express, Professional, Premium,
Ultimate, Test Professional.
(sursa: http://msdn.microsoft.com)
Tehnologia .NET pune laolaltă mai multe tehnologii (ASP, XML, OOP, SOAP,
WDSL, UDDI) şi limbaje de programare (ex.: C++, VB, C#) asigurând, totodată, atât
portabilitatea codului compilat între diferite calculatoare cu sistem Windows, cât şi
reutilizarea codului în programe, indiferent de limbajul de programare utilizat. Pentru a fi
integrate în platforma .NET, limbajele de programare sus amintite respectă un set de
caracteristici de bază Common Language Specification (CLS), astfel asigurându-se
interoperabilitatea între aplicaţii, indiferent de limbajul folosit pentru crearea acestora.
CLS-ul definește și un set de tipuri - Common Type System (CTS). Ca elemente de bază,
limbajele de programare au: clase, interfeţe, delegări, tipuri valoare şi referinţă, iar ca
mecanisme: moştenirea, polimorfismul şi tratarea excepţiilor. Limbajele au o platformă
comună de executare numită Common Language Runtime (CLR). Toate aceste limbaje
folosesc un ansamblul de biblioteci necesare în realizarea aplicaţiilor desktop sau Web,
numit Framework Class Library (FCL). În figura de mai jos este arhitectura pentru
.NET Framework.
2
Programare Windows I – Visual C++ Curs 1
Compilarea programelor
Un program scris într-unul dintre limbajele .NET conform Common Language
Specification (CLS) este compilat în Microsoft Intermediate Language (MSIL sau
IL). Codul astfel obţinut are extensia ".exe", dar nu este direct executabil, ci respectă
formatul unic MSIL. CLR include o maşină virtuală asemănătoare cu o maşină Java, ce
execută instrucţiunile IL rezultate în urma compilării. Maşina foloseşte un compilator
special JIT (Just In Time). Compilatorul JIT analizează codul IL corespunzător apelului
unei metode şi produce codul maşină adecvat şi eficient. El recunoaşte secvenţele de cod
pentru care s-a obţinut deja codul maşină adecvat, permiţând reutilizarea acestuia fără
recompilare, ceea ce face ca, pe parcursul rulării, aplicaţiile .NET să fie din ce în ce mai
rapide. Faptul că programul IL produs de diferitele limbaje este foarte asemănător are ca
rezultat interoperabilitatea între aceste limbaje. Astfel, clasele şi obiectele create într-un
limbaj specific .NET pot fi utilizate cu succes în altul. Pe lângă cele de mai sus, CLR-ul
se ocupă și de gestionarea automată a memoriei (eliberarea automată a zonelor de
memorie asociate unor date devenite inutile).
Privitor la portabilitate, trebuie spus că .NET Framework are la bază standardul
Common Language Infrastructure, ceea ce face ca aplicaţiilor .NET să ruleze, în afară
de Windows, şi pe unele tipuri de Unix, Linux, Solaris, Mac OS X şi alte sisteme de
operare.
Dintre avantajele utilizării platformei .NET Framework putem enumera:
oferă instrumente pe care le putem folosi şi în alte programe;
3
Programare Windows I – Visual C++ Curs 1
Mai jos este prezentat istoricul versiunii pentru 32 biți (sursa: Wikipedia
http://en.wikipedia.org/wiki/Visual_C%2B%2B)
Visual C++ 1.0 (original name: Visual C++ 32-bit Edition) was the first version
for 32-bit development.[7] Although released when 16-bit 1.5 was available, it did
not include support for OLE2 and ODBC
Visual C++ 2.0, which included MFC 3.0, was the first version to be 32-bit only.
Visual C++ 4.0, which included MFC 4.0, was designed for Windows 95 and
Windows NT.
Visual C++ 4.2 did not support Windows 3.x (Win32s) development.[10] This was
the final version with a cross-platform edition for the Macintosh available and it
differed from the 2.x version in that it also allowed compilation for the PowerPC
instruction set.
Visual C++ 5.0, which included MFC 4.21, was a major upgrade from 4.2.[11]
Available in four editions:
[12]
o Learning
[13]
o Professional
[14]
o Enterprise
[15]
o RISC
Visual C++ 6.0 (commonly known as VC6), which included MFC 6.0, was
released in 1998.[16] The release was somewhat controversial since it did not
include an expected update to MFC. Visual C++ 6.0 is still quite popular and
often used to maintain legacy projects. There are, however, issues with this
version under Windows XP, especially under the debugging mode (for example,
the values of static variables do not display). The debugging issues can be solved
with a patch called the "Visual C++ 6.0 Processor Pack".[17]
4
Programare Windows I – Visual C++ Curs 1
Visual C++ .NET 2002 (known also as Visual C++ 7.0), which included MFC
7.0, was released in 2002 with support for link time code generation and
debugging runtime checks, .NET 1.0, and Visual C# and Managed C++. The new
user interface used many of the hot keys and conventions of Visual Basic, which
accounted for some of its unpopularity among C++ developers.[citation needed]
Visual C++ .NET 2003 (known also as Visual C++ 7.1), which included MFC
7.1, was released in 2003 along with.NET 1.1 and was a major upgrade to Visual
C++ .NET 2002. It was considered a patch to Visual C++ .NET 2002.
Accordingly, the English language upgrade version of Visual Studio .NET 2003
shipped for minimal cost to owners of the English language version of Visual
Studio .NET 2002. This was the last version to support Windows 95 as a
target.[citation needed]
eMbedded Visual C++ in various versions was used to develop for some
versions of the Windows CE operating system. Initially it replaced a development
environment consisting of tools added onto Visual C++ 6.0. eMbedded Visual
C++ was replaced as a separate development environment by Microsoft Visual
Studio 2005.
Visual C++ 2005 (known also as Visual C++ 8.0), which included MFC 8.0, was
released in November 2005. This version supports .NET 2.0 and dropped
Managed C++ for C++/CLI. Managed C++ for CLI is still available via compiler
options though. It also introduced OpenMP. With Visual C++ 2005, Microsoft
also introduced Team Foundation Server. Visual C++ 8.0 has problems compiling
MFC AppWizard projects that were created using Visual Studio 6.0, so
maintenance of legacy projects can be continued with the original IDE if rewriting
was not feasible. Visual C++ 2005 is the last version to be able to target Windows
98, Windows Me and Windows NT 4.0. [18] [19]
o SP1 version also available in Microsoft Windows SDK Update for
Windows Vista. Version number: 14.00.50727.762
Visual C++ 2008 (known also as Visual C++ 9.0) was released in November
2007. This version supports .NET 3.5. Managed C++ for CLI is still available via
compiler options. By default, all applications compiled against the Visual C++
2008 Runtimes (static and dynamic linking) will only work under Windows 2000
and later. [20] [21] A feature pack released for VC9, later included into SP1, added
support for C++ TR1 library extensions.
o SP1 version also available in Microsoft Windows SDK for Windows 7.
Version number: 15.00.30729.01
Visual C++ 2010 (known also as Visual C++ 10.0) was released on April 12,
2010, and it is currently the latest stable release. It uses a SQL Server Compact
database to store information about the source code, including IntelliSense
information, for better IntelliSense and code-completion support.[22] This version
adds a modern C++ parallel computing library called the Parallel Patterns Library,
partial support for C++0x, significantly improved IntelliSense, and performance
improvements to both the compiler and generated code.[23]
Visual C++ 2012 (known also as Visual C++ 11.0) was released on April 15,
2012, and it is currently the latest stable release.
5
Programare Windows I – Visual C++ Curs 1
Observații:
Microsoft Foundation Class Library (de asemenea, Microsoft Foundation
Classes sau MFC) este o bibliotecă aparținând Microsoft, care încapsulează porțiuni din
Windows API în clase de C++, formând o fundație pentru aplicațiile care rulează sub
sistemul de operare Microsoft Windows. Clasele sunt definite pentru mai multe obiecte
handle, unitățile de bază ale sistemului de operare, care definesc și obiecte grafice.
Windows API (Application Programming Interface) este o interfață destinată
programării aplicațiilor pentru sistemul de operare.
C++/CLI (Common Language Infrastructure) reprezintă specificaţiile Microsoft
pentru revizuirea limbajului Managed C++ în vederea simplificării sintaxei acestuia.
C++/CLI este disponibil numai începând cu Visual Studio (inclusiv în Express Editions).
6
Programare Windows I – Visual C++ Curs 1
Observaţie:
Pentru variabile de tip long long trebuie adăugat la final LL sau ll respectiv (ULL
sau ull)
Un tip fundamental într-un program C++/CLI este un tip value class. Fiecare tip
fundamental ISO/ANSI are un corespondent value class definit în spaţiul de nume
System.
7
Programare Windows I – Visual C++ Curs 1
Long 4 System::Int32
unsigned long 4 System::UInt32
long long 8 System::Int64
unsigned long long 8 System::UInt64
Float 4 System::Single
Double 8 System::Double
long double 8 System::Double
wchar_t 2 System::Char
Un tip value class asociat unui tip fundamental are adăugate capabilităţi suplimentare.
Între tipul fundamental şi tipul value class asociat conversia poate fi făcută automat de
compilator.
Pe lângă tipurile value class asociate tipurilor standard mai există multe alte tipuri
de date, cum ar fi de exemplu tipul String ( care este utilizat pentru reprezentarea şirurilor
de caractere) şi tipul System::Decimal utilizat pentru numerele pentru care dorim să
stocăm până la 28 de zecimale.
Avantaje:
o permite un control foarte precis asupra momentului în care este distrus un obiect,
astfel folosindu-se memoria exact atât cât este nevoie;
o permite folosirea destructorilor, astfel obiectele fiind întotdeauna şterse
corespunzător.
Dezavantaje:
o riscul de a apela prea târziu (sau deloc) operatorul delete. Omiterea apelării
operatorului delete nu este în general fatală pentru program, dar conduce la
ocuparea memoriei mai mult decât este necesar (memory leakage). Memory leak
este o eroare de programare în care programatorul a alocat memorie pe heap
utilizând funcţiile din libraria standard C (malloc, calloc, realloc) sau operatorul
C++ new, dar nu a mai dezalocat memoria alocata . Acest fapt reprezintă o
problemă deoarece consumul de memorie al aplicaţiei poate creşte în mod
necontrolat. Problema devine critică mai ales în cazul aplicatiilor care trebuie sa
ruleze un timp îndelungat (de exemplu un server de baza de date, sau un server
web, un filesystem ... etc).
o riscul de a apela prea devreme operatorul delete –este o problemă mult mai gravă.
8
Programare Windows I – Visual C++ Curs 1
Exemplu:
//cream un obiect
Punct ^P=gcnew Punct();
Accesul la tipurile pentru referinţe se face prin pointeri, ceea ce afectează dimensiunea şi
viteza aplicaţiei compilate. Din aceste motive se acceptă şi tipurile pentru valori.
Obiectele de tip valoare sunt create în stiva programului. În acest caz, variabila conţine
chiar obiectul, nu un pointer către obiect. Pentru manipularea obiectului nu este necesară
dereferirea, ceea ce îmbunătăţeşte performanţele. Pentru declararea unei clase de tip
valoare se foloseşte cuvântul rezervat value iar pentru declararea unei clase pentru
referinţe se foloseşte cuvântul rezervat ref. Clasele tip valoare nu suportă constructori
sau destructori.
După cum a fost prezentat anterior, CLR-ul este acela care se ocupă de management-ul
memoriei, al firelor de execuție precum și a altor servicii sistem. În ceea ce priveşte
securitatea, orice componentă managed are diferite grade de securitate în functie de
anumiti factori printre care este inclusă şi originea lor. Codul rulat de CLR se numeşte
cod gestionat, codul executat în afara controlului CLR numindu-se cod negestionat.
Alocarea dinamică a memoriei funcţionează diferit cu CLR.
9
Programare Windows I – Visual C++ Curs 1
Cele de mai sus arată că este necesară o cale de accesare a obiectelor din heap ce
să permită ca adresa să poată fi modificată când colectorul de gunoi relocă elementele din
heap. Acest lucru poate fi realizat cu tracking handle ( sau mai simplu handle) care este
un echivalent al pointerilor nativi C++ şi cu tracking reference care este un echivalent al
referinţelor native din C++.
Un tracking handle este similar unui pointer nativ C++ dar există şi câteva
diferenţe semnificative:
o un tracking handle nu conţine o adresă, aceasta fiind actualizată în mod automat
de colectorul de gunoi dacă obiectul este mutat în urma procesului de
compactificare a memoriei heap;
o nu se pot efectua operaţii aritmetice cu adresele pointerilor tracking aşa cum se
poate în cazul pointerilor nativi;
o toate obiectele create în heap-ul CLR trebuie să fie referenţiate de un pointer
handle.
10
Programare Windows I – Visual C++ Curs 1
Memoria pentru clasele valoare este alocată implicit în stivă stack, dar se poate
stoca un asemenea obiect şi în heap utilizând operatorul gcnew.
numeTip^ numeOb;
Exemplu:
String^ cuvant;
Când se declară un handle acesta este iniţializat automat cu nullptr. Pentru a anula
explicit un handle se foloseşte cuvântul rezervat nullptr, ca în exemplul de mai jos:
cuvant = nullptr;
Exemplu:
Această linie de cod crează în heap un obiect String ce conţine mesajul din
membrul drept; adresa noului obiect este conţinută de mesaj.
Exemplu:
Se crează pointerul handle valoare de tip int^ şi valoare pointată în heap este 13.
Exemplu:
11
Programare Windows I – Visual C++ Curs 1
Exemplu:
int^ rez = 0;//se crează pointerul handle rez care pointează către
valoarea 0
rez = 2*(*valoare)+10;//în membrul drept având o valoare, compilatorul
determină automat că trebuie să deferenţieze rez.
*rez = 2*(*valoare)+10;
Important.: Pentru ultima instrucţiune trebuie ca rez să fi fost definit şi nu doar declarat.
Un handle null nu poate fi deferenţiat.
Exemplu:
Exemplu ( C++/CLI):
#include "stdafx.h"
class A{
public:
~A(){Console::WriteLine("Am distrus un obiect al clasei A");}
};
value class B{
//clasele tip valoare nu suporta constructori sau destructori
};
ref class C{
public:
~C(){Console::WriteLine("Am distrus un obiect al clasei C");}
};
void functieTest(){
A *a1=new A(),a2;
B b;
C ^c=gcnew C();
}
int main(){
functieTest();
Console::WriteLine("Sfarsit aplicatie");
return 0;
}
12
Programare Windows I – Visual C++ Curs 1
13