SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
Cours C++ (2002)
semaine 3
jour 5
Cours semaine 3 jour 5 Cours C++ 2
Plan du jour
 Exercices récapitulatifs avec C++, une base
de données et XML
Cours semaine 3 jour 5 Cours C++ 3
Premier programme
 Ce premier programme permet d’accèder à
une base de donnée, de créer divers types de
fichiers sérialisés, de modifier ces fichiers et
finalement de modifier la base de donnée
 Nous utiliserons la base de données
PTContact dont nous nous sommes déjà
servis
Cours semaine 3 jour 5 Cours C++ 4
Premier programme (2)
 L’accès à la base de données se fera par
ADO, ActiveX Data Object
 Les fichiers sérialisés seront de deux type
 XML
 ADTG, Advanced Data TableGram, un format
Microsoft
 Nous créerons également des DOM pour
voir le traitement en cours
Cours semaine 3 jour 5 Cours C++ 5
Premier programme (3)
#import "c:Program FilesCommon Filessystemadomsado15.dll" 
rename_namespace( "MSXML2" ) rename( "EOF", "ADOEOF" )
#import "c:WINNTsystem32msxml4.dll"
// pour MSXML 3.0
//#import "c:WINNTsystem32msxml3.dll"
using namespace MSXML2;
#include <ole2.h>
#include <stdio.h>
#include <conio.h>
#include <io.h>
// une fonction inline pour voir, un peu inutile mais bon pour la démo
inline void TESTHR( HRESULT x ) { if FAILED(x) _com_issue_error( x ); };
Cours semaine 3 jour 5 Cours C++ 6
Premier programme (4)
bool supprimeFichier()
{
struct _finddata_t xml_file;
long hFile;
if( ( hFile = _findfirst( "res.xml", &xml_file ) ) != -1L )
{
DeleteFile( "res.xml" );
DeleteFile( "res_new.xml" );
DeleteFile( "res.adtg" );
return true;
}
else
return false;
}
Cours semaine 3 jour 5 Cours C++ 7
Premier programme (5)
void AffichageErreurCom( _com_error &e )
{
_bstr_t bstrSource( e.Source() );
_bstr_t bstrDescription( e.Description() );
printf( "Erreur COMn" );
printf( "tCode - numéro : %08lxn", e.Error() );
printf( "tCode - signification : %sn", e.ErrorMessage() );
printf( "tSource = %sn", (LPCSTR) bstrSource );
printf( "tDescription = %sn", (LPCSTR) bstrDescription );
}
Cours semaine 3 jour 5 Cours C++ 8
Premier programme (6)
void AffichageErreurProvider( _ConnectionPtr pConnection )
{
ErrorPtr pErr = NULL;
if( ( pConnection->Errors->Count ) > 0 )
{
long nCount = pConnection->Errors->Count;
for( long i = 0; i < nCount; i++ )
{
pErr = pConnection->Errors->GetItem( i );
printf( "Erreur - numéro : %xn", pErr->Number );
printf( "Erreur - description : %sn", (LPCSTR)
pErr->Description );
}
}
}
Cours semaine 3 jour 5 Cours C++ 9
Premier programme (7)
void Sauve_DB_XML()
{
HRESULT hr = S_OK;
_RecordsetPtr pRstContacts = NULL;
_bstr_t strCnn( "Provider=MSDASQL.1;Persist Security Info=False;"
"Data Source=PTContact;Mode=ReadWrite" );
try
{
TESTHR(pRstContacts.CreateInstance(__uuidof(Recordset )));
pRstContacts->Open( "SELECT * FROM Contacts",
strCnn,
adOpenDynamic,
adLockBatchOptimistic,
adCmdText );
Cours semaine 3 jour 5 Cours C++ 10
Premier programme (8)
// persistence du RecordSet dans un fichier XML
pRstContacts->Save( "res.xml", adPersistXML );
// persistence du RecordSet dans une structure DOM
IXMLDOMDocumentPtr pXMLDOMDoc;
TESTHR( pXMLDOMDoc.CreateInstance( __uuidof( DOMDocument ) ) );
pRstContacts->Save( pXMLDOMDoc.GetInterfacePtr(), adPersistXML );
// affichage du DOM
printf( pXMLDOMDoc->Getxml() );
pRstContacts->Close();
Cours semaine 3 jour 5 Cours C++ 11
Premier programme (9)
}
catch(_com_error &e)
{
_variant_t vtConnect = pRstContacts->GetActiveConnection();
switch( vtConnect.vt )
{
case VT_BSTR:
AffichageErreurCom( e );
break;
case VT_DISPATCH:
AffichageErreurProvider( vtConnect );
break;
default:
printf( "Une erreur (ni COM, ni provider) s'est produite" );
break;
}
}}
Cours semaine 3 jour 5 Cours C++ 12
Premier programme (10)
void Sauve_XML_ADTG()
{
HRESULT hr = S_OK;
_RecordsetPtr pRstContacts = NULL;
try
{
TESTHR(pRstContacts.CreateInstance(__uuidof(Recordset)));
pRstContacts->Open( "res.xml",
"Provider=MSPersist;",
adOpenForwardOnly,
adLockPessimistic,
adCmdFile );
Cours semaine 3 jour 5 Cours C++ 13
Premier programme (11)
pRstContacts->Find( "LastName = 'BUNIET'", NULL, adSearchForward );
if( pRstContacts->ADOEOF )
{
printf( "Le contact n'a pas été trouvé dans le fichier XMLn" );
pRstContacts->Close();
return;
}
else
{
printf( "Le contact a été trouvé dans le fichier XMLn" );
}
Cours semaine 3 jour 5 Cours C++ 14
Premier programme (12)
pRstContacts->GetFields()->GetItem( "City" )->PutValue( "Berkeley" );
pRstContacts->GetFields()->GetItem( "PostalCode" )->PutValue( "L-2401" );
pRstContacts->Update();
IXMLDOMDocumentPtr pXMLDOMDoc;
TESTHR( pXMLDOMDoc.CreateInstance( __uuidof( DOMDocument ) ) );
pRstContacts->Save( pXMLDOMDoc.GetInterfacePtr(), adPersistXML );
printf( pXMLDOMDoc->Getxml() );
// persistence du RecordSet dans un ADTG
pRstContacts->Save( "res.adtg", adPersistADTG );
pRstContacts->Close();
Cours semaine 3 jour 5 Cours C++ 15
Premier programme (13)
}
catch(_com_error &e)
{
_variant_t vtConnect = pRstContacts->GetActiveConnection();
switch( vtConnect.vt )
{
case VT_BSTR:
AffichageErreurCom( e );
break;
case VT_DISPATCH:
AffichageErreurProvider( vtConnect );
break;
default:
printf( "Une erreur (ni COM, ni provider) s'est produite" );
break;
}
}}
Cours semaine 3 jour 5 Cours C++ 16
Premier programme (14)
void Sauve_ADTG_BD()
{
HRESULT hr = S_OK;
_RecordsetPtr pRstContacts = NULL;
_ConnectionPtr pCnn = NULL;
_bstr_t strCnn( "Provider=MSDASQL.1;Persist Security Info=False;"
"Data Source=PTContact;Mode=ReadWrite" );
try
{
TESTHR( pCnn.CreateInstance( __uuidof( Connection ) ) );
TESTHR(pRstContacts.CreateInstance(__uuidof( Recordset)));
Cours semaine 3 jour 5 Cours C++ 17
Premier programme (15)
pRstContacts->Open( "res.adtg",
"Provider=MSPersist;",
adOpenForwardOnly,
adLockOptimistic,
adCmdFile );
pCnn->Open( strCnn, "", "", NULL );
pRstContacts->PutActiveConnection( _variant_t( (IDispatch *) pCnn ) );
pRstContacts->UpdateBatch( adAffectAll );
pRstContacts->Close();
pCnn->Close();
Cours semaine 3 jour 5 Cours C++ 18
Premier programme (16)
}
catch(_com_error &e)
{
_variant_t vtConnect = pRstContacts->GetActiveConnection();
switch( vtConnect.vt )
{
case VT_BSTR:
AffichageErreurCom( e );
break;
case VT_DISPATCH:
AffichageErreurProvider( vtConnect );
break;
default:
printf( "Une erreur (ni COM, ni provider) s'est produite" );
break;
}
}}
Cours semaine 3 jour 5 Cours C++ 19
Premier programme (17)
void main()
{
if( FAILED( ::CoInitialize( NULL ) ) )
return;
if( supprimeFichier() )
{
printf( "Le fichier res.xml a été supprimé!n" );
}
printf( "Passage de DB vers XMLn" );
Sauve_DB_XML();
printf( "Passage de XML vers ADTGn" );
Sauve_XML_ADTG();
printf( "Passage de ADTG vers DBn" );
Sauve_ADTG_BD();
::CoUninitialize();
}
Cours semaine 3 jour 5 Cours C++ 20
Premier programme (18)
 Ce programme consulte la table Contacts
dans la Data Source PTContact
 Il stocke tous les enregistrements dans un
fichier XML
 Au passage, on sauve les enregistrements dans
un DOM
 Ce DOM est ensuite affiché à l’écran, dans la
console
Cours semaine 3 jour 5 Cours C++ 21
Premier programme (19)
 Le fichier XML est rechargé en mémoire, il
est modifié et sauvagardé dans ub ADTG
 Le nouveau DOM est lui aussi affiché dans la
fenêtre console
 Le contenu du fichier ADTG est finalement
chargé et sauvegardé dans PTContact
 Le tout en COM
 Normal pour utiliser de l’ADO !
Cours semaine 3 jour 5 Cours C++ 22
Premier programme (20)
 Exercice :
 Reprenez le premier exemple de la journée
traitant de la persistence XML d’une table
d’une base de données relationnelle
 Écrivez un fichier XSL permettant de produire
une sortie HTML à ce fichier
 Testez votre fichier XSL avec le programme
MSXSL et Internet Explorer (pour le fichier
résultat HTML)
Cours semaine 3 jour 5 Cours C++ 23
Premier programme (21)
 Exercice (suite) :
 Modifier le premier programme en vous
inspirant des sources de MSXSL : effectuez la
transformation XSL à l’intérieur du programme
ComSave
Cours semaine 3 jour 5 Cours C++ 24
Deuxième programme
 Il ne s’agit pas d’un programme mais d’un
ensemble de programmes fournis par
Microsoft
 Le workspace contient 5 projets liés
 Ils permettent de voir la manière de créer et
de traiter des documents XML
 Notion de producteurs et de consommateurs
Cours semaine 3 jour 5 Cours C++ 25
Deuxième programme (2)
 Récupérez le fichier xml_consumer.exe
 Décompressez le fichier dans votre
répertoire "My Projects"
 Ouvrez le fichier de Workspace qui se
trouve sous "XMLComponents"
 Le fichier de workspace s’appelle
"XMLComponents.dsw"
Cours semaine 3 jour 5 Cours C++ 26
Deuxième programme (3)
 Mettez l’Active Project sur tstXML
 Compilez
 Exécutez
 Allez regardez c:example.xml
Cours semaine 3 jour 5 Cours C++ 27
Deuxième programme (4)
 Exercice :
 Qui a écrit quoi ?
 Modifiez le programme approprié de manière à
créer deux autres childObjects dans le fichier
c.example.xml
 Dans les childObjects générés, ajoutez un
troisième élément racine "myNewValue"
pouvant contenir une chaîne de caractères
Cours semaine 3 jour 5 Cours C++ 28
L’avenir de C++
 C et C++ semble être des langages très
efficaces lorsqu’il s’agit de faire des
programmes dont l’objectif est
 D’être compacte
 D’être rapide
 D’être très technique
 Et on peut se dire que c’est vrai…
Cours semaine 3 jour 5 Cours C++ 29
L’avenir de C++ (2)
 À la Washington University de Saint Louis
(Missouri), un chercheur (Douglas Schmidt)
a développé un ensemble de programmes
écrit en C++ permettant de mettre en œuvre
CORBA
 Modèle objet distribué "similaire" à COM
 Microsoft fait d’ailleurs bizarrement partie des
sponsors ayant financé le projet !
Cours semaine 3 jour 5 Cours C++ 30
L’avenir de C++ (3)
 Cette architecture est composée de deux
blocs
 ACE, Adaptive Communication Environment
 TAO, The ACE ORB
Cours semaine 3 jour 5 Cours C++ 31
L’avenir de C++ (4)
 La totalité de la plate-forme représente un total de
135.000 ligne de code en C++
 C’est beaucoup
 Et Douglas Schmidt est un très bon programmeur C++ !
 Rassurez-vous, il n’était pas seul pour les 135.000 lignes…
 Consultez les sources du projet…
 ACE-TAO est très rapide
 Il est même tellement rapide qu’il s’agit désormais
d’une plate-forme CORBA temps-réel !
 Et il semble que ce soit bien la plus rapide du marché…
Cours semaine 3 jour 5 Cours C++ 32
L’avenir de C++ (5)
 La plate-forme est tellement efficace que
certains industriels l’utilisent
 Parmi ces industriels se trouvent Boeing
 TAO est une plateforme logicielle utilisée
dans l’avionique des dernières versions des
avions :
 F15 Eagle (au moins en test)
 F/A 18 Hornet (au moins en test)
 AV-8B Harrier (en production)
Cours semaine 3 jour 5 Cours C++ 33
L’avenir de C++ (6)
 C++ semble donc avoir de beaux jours
devant lui
 Des produits industriels l’utilisent
 Et certains de ces produits sont sensibles !
 Et pourtant :
Cours semaine 3 jour 5 Cours C++ 34
L’avenir de C++ (7)
 Douglas Schmidt a quitté la wustl pour
rejoindre UCI, University of California,
Irvine
 Il y développe Zen, une plateforme CORBA
temps-réel en … Java
Cours semaine 3 jour 5 Cours C++ 35
Questions / Remarques
Cours semaine 3 jour 5 Cours C++ 36
Le mot de la fin
Bons pointeurs !

Contenu connexe

Tendances

TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieMariem ZAOUALI
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web servicesYann Caron
 
Trivial Java Second
Trivial Java SecondTrivial Java Second
Trivial Java SecondKatia Aresti
 
PostGIS @ Pgday.eu 2009
PostGIS @ Pgday.eu 2009PostGIS @ Pgday.eu 2009
PostGIS @ Pgday.eu 2009Oslandia
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketStéphane Legrand
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Parischristophep21
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Microsoft
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11Microsoft
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieMariem ZAOUALI
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++cppfrug
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieMariem ZAOUALI
 
Formation GraceTHD Ou mode d'emploi pour réceptionner, visualiser & gérer les...
Formation GraceTHD Ou mode d'emploi pour réceptionner, visualiser & gérer les...Formation GraceTHD Ou mode d'emploi pour réceptionner, visualiser & gérer les...
Formation GraceTHD Ou mode d'emploi pour réceptionner, visualiser & gérer les...Christophe Niel
 
Incorporer du C dans R, créer son package
Incorporer du C dans R, créer son packageIncorporer du C dans R, créer son package
Incorporer du C dans R, créer son packageCdiscount
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliquesMariem ZAOUALI
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieMariem ZAOUALI
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simplesPethrvs
 
Programmation Android - 02 - Android
Programmation Android - 02 - AndroidProgrammation Android - 02 - Android
Programmation Android - 02 - AndroidYann Caron
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...ECAM Brussels Engineering School
 

Tendances (20)

TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / Tunisie
 
Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web services
 
Trivial Java Second
Trivial Java SecondTrivial Java Second
Trivial Java Second
 
PostGIS @ Pgday.eu 2009
PostGIS @ Pgday.eu 2009PostGIS @ Pgday.eu 2009
PostGIS @ Pgday.eu 2009
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacket
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Paris
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
 
Formation GraceTHD Ou mode d'emploi pour réceptionner, visualiser & gérer les...
Formation GraceTHD Ou mode d'emploi pour réceptionner, visualiser & gérer les...Formation GraceTHD Ou mode d'emploi pour réceptionner, visualiser & gérer les...
Formation GraceTHD Ou mode d'emploi pour réceptionner, visualiser & gérer les...
 
Trivial Java - Part 2
Trivial Java - Part 2Trivial Java - Part 2
Trivial Java - Part 2
 
Incorporer du C dans R, créer son package
Incorporer du C dans R, créer son packageIncorporer du C dans R, créer son package
Incorporer du C dans R, créer son package
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliques
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / Tunisie
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 
Programmation Android - 02 - Android
Programmation Android - 02 - AndroidProgrammation Android - 02 - Android
Programmation Android - 02 - Android
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
 

Similaire à Cours de C++, en français, 2002 - Cours 3.5

Slides ceplex
Slides ceplexSlides ceplex
Slides ceplexTECOS
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Laurent BUNIET
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Aziz Darouichi
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4Laurent BUNIET
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystMathieu Goeminne
 
Affichage d'un document Office sous Android
Affichage d'un document Office sous AndroidAffichage d'un document Office sous Android
Affichage d'un document Office sous AndroidStéphane Liétard
 
Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Laurent BUNIET
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDotNetHub
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db firstZineb ELGARRAI
 
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...Microsoft Technet France
 
Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4Laurent BUNIET
 

Similaire à Cours de C++, en français, 2002 - Cours 3.5 (20)

Slides ceplex
Slides ceplexSlides ceplex
Slides ceplex
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2
 
Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5Cours de C++, en français, 2002 - Cours 2.5
Cours de C++, en français, 2002 - Cours 2.5
 
Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4Cours de C++, en français, 2002 - Cours 1.4
Cours de C++, en français, 2002 - Cours 1.4
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et Catalyst
 
Affichage d'un document Office sous Android
Affichage d'un document Office sous AndroidAffichage d'un document Office sous Android
Affichage d'un document Office sous Android
 
Outils front-end
Outils front-endOutils front-end
Outils front-end
 
Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1Cours de C++, en français, 2002 - Cours 3.1
Cours de C++, en français, 2002 - Cours 3.1
 
Crud
CrudCrud
Crud
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCL
 
Entity_framework_db first
Entity_framework_db firstEntity_framework_db first
Entity_framework_db first
 
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
 
Android ORMLite
Android   ORMLiteAndroid   ORMLite
Android ORMLite
 
Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4
 

Plus de Laurent BUNIET

Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Laurent BUNIET
 
Cours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - PlanCours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - PlanLaurent BUNIET
 

Plus de Laurent BUNIET (8)

Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4Cours de C++, en français, 2002 - Cours 3.4
Cours de C++, en français, 2002 - Cours 3.4
 
Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3Cours de C++, en français, 2002 - Cours 3.3
Cours de C++, en français, 2002 - Cours 3.3
 
Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5
 
Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3Cours de C++, en français, 2002 - Cours 1.3
Cours de C++, en français, 2002 - Cours 1.3
 
Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2Cours de C++, en français, 2002 - Cours 1.2
Cours de C++, en français, 2002 - Cours 1.2
 
Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1Cours de C++, en français, 2002 - Cours 1.1
Cours de C++, en français, 2002 - Cours 1.1
 
Cours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - PlanCours de C++, en français, 2002 - Plan
Cours de C++, en français, 2002 - Plan
 

Cours de C++, en français, 2002 - Cours 3.5

  • 2. Cours semaine 3 jour 5 Cours C++ 2 Plan du jour  Exercices récapitulatifs avec C++, une base de données et XML
  • 3. Cours semaine 3 jour 5 Cours C++ 3 Premier programme  Ce premier programme permet d’accèder à une base de donnée, de créer divers types de fichiers sérialisés, de modifier ces fichiers et finalement de modifier la base de donnée  Nous utiliserons la base de données PTContact dont nous nous sommes déjà servis
  • 4. Cours semaine 3 jour 5 Cours C++ 4 Premier programme (2)  L’accès à la base de données se fera par ADO, ActiveX Data Object  Les fichiers sérialisés seront de deux type  XML  ADTG, Advanced Data TableGram, un format Microsoft  Nous créerons également des DOM pour voir le traitement en cours
  • 5. Cours semaine 3 jour 5 Cours C++ 5 Premier programme (3) #import "c:Program FilesCommon Filessystemadomsado15.dll" rename_namespace( "MSXML2" ) rename( "EOF", "ADOEOF" ) #import "c:WINNTsystem32msxml4.dll" // pour MSXML 3.0 //#import "c:WINNTsystem32msxml3.dll" using namespace MSXML2; #include <ole2.h> #include <stdio.h> #include <conio.h> #include <io.h> // une fonction inline pour voir, un peu inutile mais bon pour la démo inline void TESTHR( HRESULT x ) { if FAILED(x) _com_issue_error( x ); };
  • 6. Cours semaine 3 jour 5 Cours C++ 6 Premier programme (4) bool supprimeFichier() { struct _finddata_t xml_file; long hFile; if( ( hFile = _findfirst( "res.xml", &xml_file ) ) != -1L ) { DeleteFile( "res.xml" ); DeleteFile( "res_new.xml" ); DeleteFile( "res.adtg" ); return true; } else return false; }
  • 7. Cours semaine 3 jour 5 Cours C++ 7 Premier programme (5) void AffichageErreurCom( _com_error &e ) { _bstr_t bstrSource( e.Source() ); _bstr_t bstrDescription( e.Description() ); printf( "Erreur COMn" ); printf( "tCode - numéro : %08lxn", e.Error() ); printf( "tCode - signification : %sn", e.ErrorMessage() ); printf( "tSource = %sn", (LPCSTR) bstrSource ); printf( "tDescription = %sn", (LPCSTR) bstrDescription ); }
  • 8. Cours semaine 3 jour 5 Cours C++ 8 Premier programme (6) void AffichageErreurProvider( _ConnectionPtr pConnection ) { ErrorPtr pErr = NULL; if( ( pConnection->Errors->Count ) > 0 ) { long nCount = pConnection->Errors->Count; for( long i = 0; i < nCount; i++ ) { pErr = pConnection->Errors->GetItem( i ); printf( "Erreur - numéro : %xn", pErr->Number ); printf( "Erreur - description : %sn", (LPCSTR) pErr->Description ); } } }
  • 9. Cours semaine 3 jour 5 Cours C++ 9 Premier programme (7) void Sauve_DB_XML() { HRESULT hr = S_OK; _RecordsetPtr pRstContacts = NULL; _bstr_t strCnn( "Provider=MSDASQL.1;Persist Security Info=False;" "Data Source=PTContact;Mode=ReadWrite" ); try { TESTHR(pRstContacts.CreateInstance(__uuidof(Recordset ))); pRstContacts->Open( "SELECT * FROM Contacts", strCnn, adOpenDynamic, adLockBatchOptimistic, adCmdText );
  • 10. Cours semaine 3 jour 5 Cours C++ 10 Premier programme (8) // persistence du RecordSet dans un fichier XML pRstContacts->Save( "res.xml", adPersistXML ); // persistence du RecordSet dans une structure DOM IXMLDOMDocumentPtr pXMLDOMDoc; TESTHR( pXMLDOMDoc.CreateInstance( __uuidof( DOMDocument ) ) ); pRstContacts->Save( pXMLDOMDoc.GetInterfacePtr(), adPersistXML ); // affichage du DOM printf( pXMLDOMDoc->Getxml() ); pRstContacts->Close();
  • 11. Cours semaine 3 jour 5 Cours C++ 11 Premier programme (9) } catch(_com_error &e) { _variant_t vtConnect = pRstContacts->GetActiveConnection(); switch( vtConnect.vt ) { case VT_BSTR: AffichageErreurCom( e ); break; case VT_DISPATCH: AffichageErreurProvider( vtConnect ); break; default: printf( "Une erreur (ni COM, ni provider) s'est produite" ); break; } }}
  • 12. Cours semaine 3 jour 5 Cours C++ 12 Premier programme (10) void Sauve_XML_ADTG() { HRESULT hr = S_OK; _RecordsetPtr pRstContacts = NULL; try { TESTHR(pRstContacts.CreateInstance(__uuidof(Recordset))); pRstContacts->Open( "res.xml", "Provider=MSPersist;", adOpenForwardOnly, adLockPessimistic, adCmdFile );
  • 13. Cours semaine 3 jour 5 Cours C++ 13 Premier programme (11) pRstContacts->Find( "LastName = 'BUNIET'", NULL, adSearchForward ); if( pRstContacts->ADOEOF ) { printf( "Le contact n'a pas été trouvé dans le fichier XMLn" ); pRstContacts->Close(); return; } else { printf( "Le contact a été trouvé dans le fichier XMLn" ); }
  • 14. Cours semaine 3 jour 5 Cours C++ 14 Premier programme (12) pRstContacts->GetFields()->GetItem( "City" )->PutValue( "Berkeley" ); pRstContacts->GetFields()->GetItem( "PostalCode" )->PutValue( "L-2401" ); pRstContacts->Update(); IXMLDOMDocumentPtr pXMLDOMDoc; TESTHR( pXMLDOMDoc.CreateInstance( __uuidof( DOMDocument ) ) ); pRstContacts->Save( pXMLDOMDoc.GetInterfacePtr(), adPersistXML ); printf( pXMLDOMDoc->Getxml() ); // persistence du RecordSet dans un ADTG pRstContacts->Save( "res.adtg", adPersistADTG ); pRstContacts->Close();
  • 15. Cours semaine 3 jour 5 Cours C++ 15 Premier programme (13) } catch(_com_error &e) { _variant_t vtConnect = pRstContacts->GetActiveConnection(); switch( vtConnect.vt ) { case VT_BSTR: AffichageErreurCom( e ); break; case VT_DISPATCH: AffichageErreurProvider( vtConnect ); break; default: printf( "Une erreur (ni COM, ni provider) s'est produite" ); break; } }}
  • 16. Cours semaine 3 jour 5 Cours C++ 16 Premier programme (14) void Sauve_ADTG_BD() { HRESULT hr = S_OK; _RecordsetPtr pRstContacts = NULL; _ConnectionPtr pCnn = NULL; _bstr_t strCnn( "Provider=MSDASQL.1;Persist Security Info=False;" "Data Source=PTContact;Mode=ReadWrite" ); try { TESTHR( pCnn.CreateInstance( __uuidof( Connection ) ) ); TESTHR(pRstContacts.CreateInstance(__uuidof( Recordset)));
  • 17. Cours semaine 3 jour 5 Cours C++ 17 Premier programme (15) pRstContacts->Open( "res.adtg", "Provider=MSPersist;", adOpenForwardOnly, adLockOptimistic, adCmdFile ); pCnn->Open( strCnn, "", "", NULL ); pRstContacts->PutActiveConnection( _variant_t( (IDispatch *) pCnn ) ); pRstContacts->UpdateBatch( adAffectAll ); pRstContacts->Close(); pCnn->Close();
  • 18. Cours semaine 3 jour 5 Cours C++ 18 Premier programme (16) } catch(_com_error &e) { _variant_t vtConnect = pRstContacts->GetActiveConnection(); switch( vtConnect.vt ) { case VT_BSTR: AffichageErreurCom( e ); break; case VT_DISPATCH: AffichageErreurProvider( vtConnect ); break; default: printf( "Une erreur (ni COM, ni provider) s'est produite" ); break; } }}
  • 19. Cours semaine 3 jour 5 Cours C++ 19 Premier programme (17) void main() { if( FAILED( ::CoInitialize( NULL ) ) ) return; if( supprimeFichier() ) { printf( "Le fichier res.xml a été supprimé!n" ); } printf( "Passage de DB vers XMLn" ); Sauve_DB_XML(); printf( "Passage de XML vers ADTGn" ); Sauve_XML_ADTG(); printf( "Passage de ADTG vers DBn" ); Sauve_ADTG_BD(); ::CoUninitialize(); }
  • 20. Cours semaine 3 jour 5 Cours C++ 20 Premier programme (18)  Ce programme consulte la table Contacts dans la Data Source PTContact  Il stocke tous les enregistrements dans un fichier XML  Au passage, on sauve les enregistrements dans un DOM  Ce DOM est ensuite affiché à l’écran, dans la console
  • 21. Cours semaine 3 jour 5 Cours C++ 21 Premier programme (19)  Le fichier XML est rechargé en mémoire, il est modifié et sauvagardé dans ub ADTG  Le nouveau DOM est lui aussi affiché dans la fenêtre console  Le contenu du fichier ADTG est finalement chargé et sauvegardé dans PTContact  Le tout en COM  Normal pour utiliser de l’ADO !
  • 22. Cours semaine 3 jour 5 Cours C++ 22 Premier programme (20)  Exercice :  Reprenez le premier exemple de la journée traitant de la persistence XML d’une table d’une base de données relationnelle  Écrivez un fichier XSL permettant de produire une sortie HTML à ce fichier  Testez votre fichier XSL avec le programme MSXSL et Internet Explorer (pour le fichier résultat HTML)
  • 23. Cours semaine 3 jour 5 Cours C++ 23 Premier programme (21)  Exercice (suite) :  Modifier le premier programme en vous inspirant des sources de MSXSL : effectuez la transformation XSL à l’intérieur du programme ComSave
  • 24. Cours semaine 3 jour 5 Cours C++ 24 Deuxième programme  Il ne s’agit pas d’un programme mais d’un ensemble de programmes fournis par Microsoft  Le workspace contient 5 projets liés  Ils permettent de voir la manière de créer et de traiter des documents XML  Notion de producteurs et de consommateurs
  • 25. Cours semaine 3 jour 5 Cours C++ 25 Deuxième programme (2)  Récupérez le fichier xml_consumer.exe  Décompressez le fichier dans votre répertoire "My Projects"  Ouvrez le fichier de Workspace qui se trouve sous "XMLComponents"  Le fichier de workspace s’appelle "XMLComponents.dsw"
  • 26. Cours semaine 3 jour 5 Cours C++ 26 Deuxième programme (3)  Mettez l’Active Project sur tstXML  Compilez  Exécutez  Allez regardez c:example.xml
  • 27. Cours semaine 3 jour 5 Cours C++ 27 Deuxième programme (4)  Exercice :  Qui a écrit quoi ?  Modifiez le programme approprié de manière à créer deux autres childObjects dans le fichier c.example.xml  Dans les childObjects générés, ajoutez un troisième élément racine "myNewValue" pouvant contenir une chaîne de caractères
  • 28. Cours semaine 3 jour 5 Cours C++ 28 L’avenir de C++  C et C++ semble être des langages très efficaces lorsqu’il s’agit de faire des programmes dont l’objectif est  D’être compacte  D’être rapide  D’être très technique  Et on peut se dire que c’est vrai…
  • 29. Cours semaine 3 jour 5 Cours C++ 29 L’avenir de C++ (2)  À la Washington University de Saint Louis (Missouri), un chercheur (Douglas Schmidt) a développé un ensemble de programmes écrit en C++ permettant de mettre en œuvre CORBA  Modèle objet distribué "similaire" à COM  Microsoft fait d’ailleurs bizarrement partie des sponsors ayant financé le projet !
  • 30. Cours semaine 3 jour 5 Cours C++ 30 L’avenir de C++ (3)  Cette architecture est composée de deux blocs  ACE, Adaptive Communication Environment  TAO, The ACE ORB
  • 31. Cours semaine 3 jour 5 Cours C++ 31 L’avenir de C++ (4)  La totalité de la plate-forme représente un total de 135.000 ligne de code en C++  C’est beaucoup  Et Douglas Schmidt est un très bon programmeur C++ !  Rassurez-vous, il n’était pas seul pour les 135.000 lignes…  Consultez les sources du projet…  ACE-TAO est très rapide  Il est même tellement rapide qu’il s’agit désormais d’une plate-forme CORBA temps-réel !  Et il semble que ce soit bien la plus rapide du marché…
  • 32. Cours semaine 3 jour 5 Cours C++ 32 L’avenir de C++ (5)  La plate-forme est tellement efficace que certains industriels l’utilisent  Parmi ces industriels se trouvent Boeing  TAO est une plateforme logicielle utilisée dans l’avionique des dernières versions des avions :  F15 Eagle (au moins en test)  F/A 18 Hornet (au moins en test)  AV-8B Harrier (en production)
  • 33. Cours semaine 3 jour 5 Cours C++ 33 L’avenir de C++ (6)  C++ semble donc avoir de beaux jours devant lui  Des produits industriels l’utilisent  Et certains de ces produits sont sensibles !  Et pourtant :
  • 34. Cours semaine 3 jour 5 Cours C++ 34 L’avenir de C++ (7)  Douglas Schmidt a quitté la wustl pour rejoindre UCI, University of California, Irvine  Il y développe Zen, une plateforme CORBA temps-réel en … Java
  • 35. Cours semaine 3 jour 5 Cours C++ 35 Questions / Remarques
  • 36. Cours semaine 3 jour 5 Cours C++ 36 Le mot de la fin Bons pointeurs !